如何在Emacs中配置flycheck与lintr以检查R代码?
如何在Emacs中配置Flycheck与lintr检查R代码?
我来帮你搞定这个问题!既然你已经搞定了ESS的配置,也在R控制台里装好了lintr,还确认了R的路径没问题,那只需要在你的.emacs配置里加几行代码,就能让Flycheck和lintr顺利联动起来。
步骤1:让Flycheck启用R的lintr检查器
首先要告诉Flycheck,对R代码要用上lintr检查器。把这段代码加到你的配置文件里:
(with-eval-after-load 'flycheck (flycheck-add-next-checker 'r-check 'r-lintr))
这行代码的作用是:等Flycheck加载完成后,把r-lintr检查器加到R代码的检查队列里,排在默认的r-check之后——当然你也可以调整顺序让lintr优先,不过默认的顺序已经能满足基础编码问题的检查需求了。
步骤2:(可选)指定lintr的路径
如果Flycheck找不到lintr的安装位置(比如你的R包没装在默认路径),可以手动指定它的路径。先在R控制台里运行system.file("lintr.R", package = "lintr"),得到lintr脚本的路径,然后把这段代码加到配置里:
(setq flycheck-r-lintr-location "你得到的lintr脚本路径")
不过只要你能在ESS的R控制台里正常调用lintr::lint(),这一步其实可以跳过。
步骤3:验证配置是否生效
保存你的.emacs配置,重启Emacs后打开一个R文件:
- 先运行
M-x flycheck-mode开启Flycheck(如果没有自动开启的话) - 再运行
M-x flycheck-verify-setup,这时候你应该能看到R-lintr检查器显示为available,说明配置成功了!
额外的实用小技巧
- 让Flycheck在打开R文件时自动开启:
(add-hook 'ess-mode-hook #'flycheck-mode) - 自定义lintr的检查规则:在你的R项目根目录下创建一个
.lintr文件,比如你想放宽行长度限制、关闭对象命名检查,就写:
这样lintr就会按照你设定的规则来检查代码了。linters: linters_with_defaults( line_length_linter(max_length = 120), object_name_linter = NULL )
可能遇到的小坑
- 注意R和lintr的版本兼容性:你用的是R 3.4.3,这个版本比较旧,lintr的部分功能可能受限,如果遇到奇怪的错误,可以试试更新到两者兼容的版本。
- Windows系统的路径要注意:路径里要用正斜杠
/或者双反斜杠\\,别用单反斜杠,不然Emacs识别不了。
内容的提问来源于stack exchange,提问作者Vrokipal
相关产品推荐
相关产品推荐

