如何在 Syntastic Vim 插件和 Rbenv 中启用 Rubocop?

4
我想启用Syntastic的Rubocop检查器。 我已经将其设置为检查器并提供了可执行文件的路径。尽管:SyntasticInfo报告它不是活动检查器。而且:SyntasticCheck rubocop 报告rubocop不是可用的检查器。
是否还需要其他设置?这可能是由于“rubocop --version”给出的警告消息引起的吗?
.vimrc 设置
let g:syntastic_ruby_checkers          = ['rubocop', 'mri']
let g:syntastic_ruby_rubocop_exec      = '/Users/jjasonclark/.rbenv/shims/rubocop'

Rubocop 警告信息
warning: parser/current is loading parser/ruby21, which recognizes
warning: 2.1.5-compliant syntax, but you are running 2.1.2.
0.26.0

编辑:根据评论,我发现了一个部分解决方案。可以使用RBENV shim来调用命令行参数以指定Ruby版本。这适用于手动运行命令,但对于Syntastic插件不起作用。我的猜测是它不起作用,因为Rubocop警告消息的解析器版本有问题。

let g:syntastic_ruby_rubocop_exec = 'RBENV_VERSION=2.1.2 /Users/jjasonclark/.rbenv/shims/rubocop'

编辑:我安装了Ruby 2.1.5并更新了RBENV_VERSION值,成功地删除了警告信息。但这仍然不能使Syntastic支持Rubocop。 : SyntasticCheck rubocop仍然报告syntastic:warning:checker rubocop不可用

1个回答

1
Syntastic正在加载错误的Ruby版本。从命令行输入ruby -v && which ruby。现在,将设置的第二行更改为:
let g:syntastic_ruby_rubocop_exec      = '/Users/jjasonclark/.rbenv/shims/ruby /Users/jjasonclark/yourprojectname/bin/rubocop'

使用 which rubywhich rubocop 显示的任何路径。


这听起来像是解决方案,但我们还没有完全达到目标。将Rubocop路径传递给Ruby shim不起作用。它会尝试将其作为Ruby脚本运行。 - Jason
如果我设置项目的完整路径,它可以工作。你能想到一种方法使其通用化,不仅适用于单个项目吗? - Jason
1
您可以通过gem install rubocop全局安装rubocop,然后它应该在/Users/jjasonclark/.rbenv/shims/rubocop可用。 - Dan Kohn
1
首先尝试了那个。全局安装会导致 Ruby 版本更改,从而在 --version 调用时创建警告消息。如果有任何警告,则 Rubocop 无法作为检查器使用。 - Jason
我希望我的当前 Ruby 程序能够确定要使用哪个 Ruby 可执行文件... 类似于 let g:syntastic_ruby_mri_exec = system("rbenv which ruby") - rthbound

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接