如何检查syntastic的状态?

时间:2013-06-02 02:30:52

标签: vim syntastic

我今天用自制软件更新了节点,这意味着所有的npm模块都被吹走了。这当然意味着jshint可执行文件(例如由npm install -g jshint获得)不再存在,因此Syntastic只是默默地停止检查我的js文件中的语法。

我没有花太多时间注意到,但我希望能够了解这一变化。我希望在句子状态行中以Syntastic - cannot run jshint的曲调显示某些内容(最好是红色)。

2 个答案:

答案 0 :(得分:2)

最简单的解决方案是编辑文件

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将回显的高亮颜色设置为高光组错误(很可能是红色但可能不是红色)。然后它会在您保存时打印出要打印的信息。但是这不在状态行上。

答案 1 :(得分:0)

不幸的是,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时执行一次,并且仅在作为参数提供的第一个文件上执行。远非完美,但它可能足以减少确定因缺少检查器而导致的绒毛断裂所需的时间和精力。