Vim + Syntastic + eslint不能工作的原因是因为路径被写在了zshrc文件中
总之
如果处于以下环境,可能会遇到这个问题的可能性很高。
-
- Zshを使っている
-
- Vimを使っている
- nodejs (or nvm等のnodejsバージョン管理ツール) のPATH解決を.zshrcでやってる
造成这种情况的原因是什么?
Vim不会查看.zshrc中写的PATH,而是查看.zshenv中的。
解决方案
如果你正在.zshrc文件中编写noodejs或nodejs版本管理工具的PATH,
那么你可以创建一个名为.zshenv的文件,并将该描述写入其中。
这样,从Vim查看的PATH将与在zsh中定义的PATH相匹配,这样,jslint、eslint、flowtype等命令将能够正常工作。
经过
Zsh + Vim + Syntastic -> Zsh + Vim + Syntastic
因为我平时是用Zsh和Vim进行开发的,最近开始经常使用ES6,在Vim中尝试安装了几个与Javascript相关的插件。
使用这些插件时,像语法高亮等功能都能正常使用,但是为了进行语法检查我安装了eslint,但是它似乎无法正常工作,或者说Vim无法识别它。
以前我使用过熟悉的Syntastic作为检查工具,根据搜索到的问题和博客文章尝试了各种方法,但都没有成功。
我在谷歌上查了以下页面作为参考,尝试了各种方法,但是…
-
- eslint validator not working · Issue #1110 · scrooloose/syntastic
-
- Error in eslint checker · Issue #1302 · scrooloose/syntastic
- eslint not working? · Issue #1347 · scrooloose/syntastic
在调整设置并使用SyntasticInfo进行确认时,情况如下所示。
Syntastic: active mode enabled
Syntastic info for filetype: javascript
Available checker(s): -
Currently enabled checker(s): -
我尝试了各种修改Syntastic的设置,但没有任何变化。
比如以下的描述。
let s:eslint_path = system('PATH=$(npm bin):$PATH && which eslint')
let b:syntastic_javascript_eslint_exec = substitute(s:eslint_path, '^\n*\s*\(.\{-}\)\n*\s*$', '\1', '')
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
let g:syntastic_javascript_checkers = ['eslint']
※参考:ESlint可用,但不会启用·问题#1736·scrooloose / syntastic
看起来有人说要用 g:syntastic_javascript_eslint_exe 而不是 b:syntastic_javascript_eslint_exec,所以我也试了一下,但是没成功。
虽然知道环境变量可能有问题,但关键的解决方法还是未找到。
在数天过去后,当我几乎要放弃时,我再次进行调查时发现了一个stackoverflow上的帖子,原来是我忽略了.zshenv文件!
我立刻尝试了一下,真是太顺利了。
在Go或PHP等语言中,通常会将二进制文件放置在全局路径(如/usr/bin/、/usr/local/bin等)。我猜想这可能是为什么通过vim-go可以正常运行gofmt等工具的原因。
对于全局路径,Vim自然也会自动识别。
至于nodejs,我通常会使用诸如nodebrew之类的版本管理工具,因此我需要根据readme的指示,在我的zshrc文件中手动写出自己的路径解析和导出。
由此导致Vim无法解析nodejs相关工具的路径,这就是我遇到麻烦的原因。
不得不说,这真是一次有益的学习经历。