VIM + Syntastic:如何禁用检查器?

时间:2013-11-17 12:21:17

标签: vim syntastic

我正在使用为我的HTML文件启用的Syntastic。由于我有一个非常大的文件,启用了“验证器w3”检查器,GVIM或VIM在保存文件时变得非常慢(:w)。

是否有可能只为当前会话暂时切换合成?

10 个答案:

答案 0 :(得分:153)

使用:SyntasticToggleMode您可以将Syntastic切换为被动模式,这将禁用自动检查。然后,您可以通过运行:SyntasticCheck来检查文件。

有关详情,请参阅:help syntastic-commands

另一方面说明:如果Syntastic很慢,请考虑尝试ale作为替代方案。与Syntastic不同,它以异步方式运行,所以即使它很慢也不应该阻碍你。

答案 1 :(得分:80)

我默认禁用了Syntastic,并使用.vimrc中的以下内容激活/禁用错误检查:

let g:syntastic_mode_map = { 'mode': 'passive', 'active_filetypes': [],'passive_filetypes': [] }
nnoremap <C-w>E :SyntasticCheck<CR> :SyntasticToggleMode<CR>

当我需要使用错误检查时,我只需点击: ctrl-w E

答案 2 :(得分:33)

替代Jamie和gospes答案,可以通过指定检查器来完全禁用检查器

let g:syntastic_html_checkers=['']

同时确保syntastic_check_on_open未设置为1,这将阻止上述行:

let g:syntastic_check_on_open = 0

答案 3 :(得分:10)

您可以在整个会话期间关闭Syntastic(由Jamie Schembri回答),但如果只是一个“非常大的文件”的问题,您可能只想禁用一个缓冲区。

我工作的一些文件无可救药地符合PSR标准。大部分工作都很好。我一直在寻找功能,只为那些问题文件禁用Syntastic。主要贡献者概述的“SyntasticDisableToggle”解决方案的简单形式对我有用:

"disable syntastic on a per buffer basis (some work files blow it up)
function! SyntasticDisableBuffer()
    let b:syntastic_skip_checks = 1
    SyntasticReset
    echo 'Syntastic disabled for this buffer'
endfunction

command! SyntasticDisableBuffer call SyntasticDisableBuffer()

因为这不会影响其他缓冲区,所以我可以继续使用这个非常棒的插件来处理我打开的任何其他(部分)兼容文件。

答案 4 :(得分:6)

这并没有直接解决问题,但可以超越当前会话。如果你有一个文件,你必须经常编辑,但你知道你总是想要禁用Syntastic on(例如它有成千上万的错误,你打算不修复它们,并将它留在UI减速的结果),然后永久黑名单很方便。

为此,请使用syntastic_ignore_files选项。它隐藏在帮助中,但您可以使用此功能的正则表达式将文件列入黑名单。

                                                    'syntastic_ignore_files'
Default: []
Use this option to specify files that syntastic should never check.  It's a
list of regular-expression patterns.  The full paths of files (see ::p) are
matched against these patterns, and the matches are case sensitive. Use \c
to specify case insensitive patterns.  Example:
    let g:syntastic_ignore_files = ['\m^/usr/include/', '\m\c\.h$']

答案 5 :(得分:5)

以下设置对我有用。

let g:syntastic_mode_map = { 'mode': 'passive', 'active_filetypes':   [],'passive_filetypes': [] }
noremap <C-w>e :SyntasticCheck<CR>
noremap <C-w>f :SyntasticToggleMode<CR>

Ctrl-w + e shall enable checking
Ctrl-w + f shall disable checking 

To disable warnings use: 
let g:syntastic_quiet_messages={'level':'warnings'}

答案 6 :(得分:3)

关闭检查单个缓冲区(无论文件类型如何)的另一个选项是使用:let b:syntastic_mode="passive"。由于它不是切换,即使缓冲区当前处于被动模式,它也会起作用。

如果要暂时关闭所有缓冲区中所有文件类型的检查,可以使用:bufdo let b:syntastic_mode="passive"。我有设置映射来关闭/检查所有缓冲区:

nnoremap <leader>sN :bufdo let b:syntastic_mode="passive"<cr>
nnoremap <leader>sY :bufdo unlet b:syntastic_mode<cr>

在使用大量开放缓冲区执行:wqa时,这尤其有用。

答案 7 :(得分:3)

与其他几个人提到的类似,这里是一个vimrc段,默认情况下会关闭Syntastic,但会映射一个按钮(此处为F10)来检查当前文件,并使用相同的按钮作为切换来关闭检查。它有点慢,但有效。

let g:syntastic_check_on_open = 0                                                                                 
let g:syntastic_check_on_wq = 0
let g:syntastic_mode_map = {'mode':'passive'}
nnoremap <F10> :SyntasticCheck<CR> :SyntasticToggleMode<CR> :w<CR>

答案 8 :(得分:0)

感谢Steven Lu,我现在可以忽略 Ansible Roles 的文件。

" ignore files of Ansible Roles.
let g:syntastic_ignore_files = ['\m^roles/']

答案 9 :(得分:0)

我之所以使用Ale和Syntastic,主要是因为Rust Ale支持还不是很好。就我而言,我使用的是vim-plug软件包管理器,因此我进行了设置,使其不会自动启用其中的任何一个。我改用切换策略。

在我的情况下,我默认情况下需要Ale,而Rust则需要Syntastic

在vimrc的插件部分中,我做到了

Plug 'w0rp/ale', { 'on': 'ALEToggle' }
Plug 'vim-syntastic/syntastic', { 'on': 'SyntasticToggleMode' }

此后,我设置了绑定以启用linter,(我将l用作linter的记忆)

nnoremap <leader>l :ALEToggle<CR>

对于Rust,我覆盖相同的绑定

au FileType rust noremap <buffer> <leader>l :SyntasticToggleMode<CR>

我还必须从vimrc中删除状态行内容,否则在禁用Syntastic的情况下加载它时会出错

" Syntastic stuff
"set statusline+=%#warningmsg#
"set statusline+=%{SyntasticStatuslineFlag()}
"set statusline+=%*

let g:rustfmt_autosave = 1
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
" Syntastic stuff

致谢