我怎样才能让 Syntastic 根据根目录中文件的存在加载不同的检查器?

How can I make Syntastic load a different checker based on existance of files in root?

在工作中,我们使用的语法检查器与我在使用开源软件时使用的不同。有没有办法让 Syntastic 指定默认检查器,如果在项目根目录中找到 rc 文件,则更改检查器?

示例:如果找到 .eslintrc,则使用 eslint. If no .eslintrc is found, use standard

谢谢!

编辑:还在 scrooloose/syntastic 上开了一个问题。

是的,你可以这样做:

autocmd FileType javascript let b:syntastic_checkers = findfile('.eslintrc', '.;') != '' ? ['eslint'] : ['standard']

编辑: 根据要求,解释其工作原理:

  • autocmd FileType javascript - 运行 每次将缓冲区的 filetype 设置为 javascript 时都会出现以下内容(即通常每个缓冲区一次)
  • b:syntastic_checkers 为当前缓冲区启用的检查器列表,覆盖 g:syntastic_javascript_checkers
  • findfile('.eslintrc', ...) - 找到名为 .eslintrc ...
  • 的文件
  • .; - ...在当前目录及以上目录中
  • != '' ? - 如果找到...
  • ['eslint'] - ... 将 b:syntastic_checkers 设置为 ['eslint']
  • : ['standard'] - ...否则设置为 ['standard']

魔术,我告诉你。

另一个比这个问题有更广泛应用的简单选项是将以下内容添加到您的 .vimrc 文件中:

if findfile('.lvimrc','.') != ''
    source .lvimrc
endif

然后在您想要一些不同行为的目录中,只需添加一个“.lvimrc”文件,其中包含您想要的那个目录的合成选项。