我今天用自制软件更新了节点,这意味着所有的 npm 模块都被吹走了。这当然意味着jshint
可执行文件(例如通过 获得npm install -g jshint
)不再存在,因此 Syntastic 只是默默地停止检查我的 js 文件中的语法。
我没花太长时间就注意到了,但我想知道这个变化。我希望 syntastic 在命令状态行中显示一些东西(最好是红色的),以Syntastic - cannot run jshint
.
最简单的解决方案是编辑文件
syntastic/syntax_checkers/javascript/jshint.vim
并将功能从
function! SyntaxCheckers_javascript_jshint_IsAvailable()
return executable('jshint')
endfunction
至
function! SyntaxCheckers_javascript_jshint_IsAvailable()
if executable('jshint') != 1
echohl Error
echo "Syntastic - cannot run jshint"
echohl None
endif
return executable('jshint')
endfunction
echohl 将 echo 的高亮颜色设置为高亮组 Error(很可能是红色,但也可能不是)。然后它会在您保存时打印出您要打印的消息。但是,这不在状态行上。
不幸的是,Syntastic 似乎缺乏以人们可以预期的可见性报告缺失检查器的能力。理想情况下,应该添加这样的功能。对于那些不准备修补 Syntastic 的人,一种可能的解决方法是打开调试,搜索已知有问题的字符串并对其发出警告。例如,通过用错误符号标记第一行并在新缓冲区中显示日志。我将其添加到我.vimrc
的,如下所示。
let g:syntastic_debug = 1
function! SyntasticCheckerNotFound()
redir => messages
silent messages
redir END
let pos = match(messages, "syntastic.*Checker.*is not available")
if pos != -1
new
setlocal buftype=nofile
put =messages
sign place 1 line=1 name=SyntasticError buffer=1
" goto pos
endif
let g:syntastic_debug = 0
endfunction
autocmd VimEnter <buffer> call SyntasticCheckerNotFound()
在事件上运行上述函数时VimEnter
,它仅在 vim 启动时执行一次,并且仅在作为参数提供的第一个文件上执行。远非完美,但它可能足以减少由于缺少检查器而确定损坏的棉绒所需的时间和精力。