使用 Flycheck 替代 Flymake 来进行语法检查

发布于 2025-01-24 06:40:25 字数 3123 浏览 5 评论 0

今天的主角是 Flycheck,一个很好的 Flymake 替代品。

如果你用 Emacs 有一段时间了,那你也许听说过 Flymake,它是一个 Emacs 内建的 package,可以为你提供实时语法检查和高亮错误的功能。它内置于 Emacs 有超过 10 年的历史了,虽然它依然很有用,但也开始变得有些过时了。幸好,我们还有一个替代品,那就是 Sebastian Wiesner 写的 flycheck。本文就告诉你如何从 Flymake 过渡到 Flycheck.

Flycheck 的原理和 Flymake 是一样的,都是调用外部工具(可能是一个 linter,编辑器或解释器),再将当前编辑的 buffer 内容拷贝为一个文件传递给这个外部程序,然后解析返回的错误与警告并在 buffer 的相应位置高亮出来。

那么为什么我们要弃用 Flymake 呢? 其中一个原因是它默认支持的语言太少了,也就是说,你需要为大多数的编程语言来自己编写 Flymake 上的处理器。对于大多数人来说,尤其是那些对 elisp 不熟悉的人来说,这太困难了。

Flycheck 则默认支持大多数的编程语言和开发环境,比如它就支持 C 和 C++,是否带 Clang 都支持。对大多数 Emacs 用户来说,下载,安装,启用都很方便. 你只需要在 buffer 中执行 M-x flycheck-mode 就行了,也可以执行 M-x global-flycheck-mode 来为所有 buffer 开启 flycheck 功能。

使用 Flycheck 还有一个好处就是其拥有大量的第三方插件 – 如果你发现 flycheck 默认不支持你所需要的语言,可以从其他 package 仓库中查看是否有相应的插件。

就我的经验来说,切换到 Flycheck 非常的容易. 完全可以做到无缝切换。另一个重大的优势在与速度方面. Flycheck 高效的多,你甚至还可以控制语法检查的时机(用 M-x customize-group flycheck 来定制)。

Flycheck 也有它自己的快捷键前缀,默认是 C-c ! , 它为很多有用命令都分配了快捷键:

KeyBinding
C-c ! ?Describe a Flycheck Checker
C-c ! C-cCompile using checker
C-c ! C-wCopy error point is on to kill ring
C-c ! CClear all highlights from buffer
C-c ! VReport Flycheck version
C-c ! cStart syntax checking current buffer
C-c ! eChange Flycheck executable
C-c ! iOpen Flycheck info manual
C-c ! lList all Flycheck errors
C-c ! nJump to next error
C-c ! pJump to previous error
C-c ! sChange Flycheck checker
C-c ! vVerifies the Flycheck checker works
C-c ! xDisable Flycheck checker in buffer

尤其值得关注的是 C-c ! v ,它可以作为诊断工具来使用,你执行这个命令后,Flycheck 会显示当前 buffer 所用 checker 的诊断信息,可以用来发现由于 $PATH ​ 配置错误或未安装 checker 所造成的问题。

命令 C-c ! C-c 也很方便。你不仅进可以用 Flycheck 来检查 buffer 的源代码,还能用它来编译文件,当然是否能够正常编译取决于你的编程语言以及你所使用的 checker。

Flycheck 还有一个重大的优势在于你可以很方便的添加自己的 checkers. 借助一个名为 flycheck-define-checker 的宏,通过传递几个参数你就可以创建一个 checker 了。
我特别中意使用 LISP 宏的模式匹配特性以及 rx 库,这样我就无需像 Flymake 那样写一堆的难以理解的正则表达式了。例如,下面的代码定义了一个 XML linter,你会发现它很易理解也容易修改:

(flycheck-define-checker xml-xmllint
  "A XML syntax checker and validator using the xmllint utility.

The xmllint is part of libxml2, see URL
` http://www.xmlsoft.org/'."
  :command ("xmllint" "--noout" source)
  :error-patterns
  ((error line-start (file-name) ":" line ": " (message) line-end))
  :modes (xml-mode nxml-mode))

总之 Flycheck 针对原始的 Flymake 做出了极大的改进,如果你还没有用它,我强烈推荐你下载来试一试。

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

三人与歌

暂无简介

文章
评论
28 人气
更多

推荐作者

初吻给了烟

文章 0 评论 0

十二

文章 0 评论 0

清引

文章 0 评论 0

丢了幸福的猪

文章 0 评论 0

微信用户

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文