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


118

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

是否有可能仅在当前会话时暂时关闭合成器?


3
试试let g:syntastic_disabled_filetypes=['html']
yakiang

Answers:


166

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

有关更多信息,请参见 :help syntastic-commands

另外要注意的是:如果Syntastic的速度较慢,您可以考虑尝试淡啤酒。与Syntastic不同,它异步运行,因此即使运行缓慢,也不应妨碍您。


1
有什么方法可以创建单个别名或映射键以对此进行切换?即,:error或Ctrl + Shift / Alt + e在:SyntasticCheck和之间切换:SyntasticToggleMode
yoaquim 2015年

2
您可以在.vimrc中创建这样的别名::command Sd SyntasticToggleMode 然后在vi中按:Sd,它将禁用合成。有关如何执行此操作的更多信息,请
参见

2
很好 如果有人要使用它,则映射到F6silent! nmap <F6> :SyntasticToggleMode<CR>
lfender6445 '16

87

我默认情况下禁用Syntastic,并在.vimrc中使用以下命令激活/禁用错误检查:

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

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


这非常方便,谢谢..我已将其添加到配置中。+1
jdt 2014年

3
我已经将此添加到了.vimrc。但是,如果我按Ctrl-w,则 Syntastic会弹出一秒钟,然后消失。任何想法出了什么问题和/或如何找到答案?
Anticom

我认为该映射不应具有:SyntasticToggleMode <CR>,删除该映射可以解决您的问题@Anticom。
Achal Dave

@AchalDave没有为我修复它。
Anticom '16

嗯,不知道。下面是我的syntastic的设置是这样的:github.com/achalddave/dotfiles/blob/...
Achal戴夫

33

除了Jamie和gospes答案,还可以通过指定检查器来完全禁用检查器,如下所示:

let g:syntastic_html_checkers=['']

还要确保将的syntastic_check_on_open值未设置为1,这将抵消上述行:

let g:syntastic_check_on_open = 0

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()

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


6

这并不能直接解决问题,但是可以在当前会话之后提供帮助。如果您有一个文件,必须经常编辑,但又知道您始终希望禁用Syntastic(例如,它有成千上万个错误,并且您不打算对其进行修复,而将其保留在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$']

1
很棒!不是这个问题在问什么。这是有用的+1。
bschlueter '16

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'}

4

关闭检查单个缓冲区(无论文件类型如何)的另一种方法是使用: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处理大量开放缓冲区时,这特别有用。


4

与其他人所提到的类似,这是一个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>

0

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

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

0

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

就我而言,我默认情况下要Ale,而Syntastic则要Rust

在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

问候

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.