【问题标题】:VIM + Syntastic: how to disable the checker?VIM + Syntastic:如何禁用检查器?
【发布时间】:2013-11-30 14:08:03
【问题描述】:

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

是否可以仅在当前会话中暂时关闭语法?

【问题讨论】:

  • 试试let g:syntastic_disabled_filetypes=['html']

标签: vim syntastic


【解决方案1】:

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

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

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

【讨论】:

  • 这很方便,谢谢.. 我已将这个想法添加到我的配置中。 +1
  • 我也将此添加到我的.vimrc。但是,如果我按 Ctrl-w E Syntastic 会弹出一秒钟然后再次消失。任何想法出了什么问题和/或如何追踪?
  • 我认为映射不应该有 :SyntasticToggleMode,删除它应该可以解决您的问题 @Anticom。
  • @AchalDave 没有帮我解决。
  • 嗯,不知道。这是我的合成设置的样子:github.com/achalddave/dotfiles/blob/…
【解决方案2】:

我使用 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

问候

【讨论】:

    【解决方案3】:

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

    欲了解更多信息,请参阅:help syntastic-commands

    另外注意:如果 Syntastic 对您来说速度很慢,请考虑尝试 ale 作为替代方案。与 Syntastic 不同的是,它是异步运行的,因此即使速度很慢也不会妨碍您。

    【讨论】:

    • 有没有办法创建一个别名或映射一个键来切换它?即,:error 或 Ctrl+Shift/Alt+e 在:SyntasticCheck:SyntasticToggleMode 之间切换。
    • 您可以在 .vimrc 中创建这样的别名::command Sd SyntasticToggleMode 然后在 vi 中按 :Sd 它将禁用合成。有关如何在此处执行此操作的更多信息:stackoverflow.com/questions/3878692/aliasing-a-command-in-vim
    • 不错。如果有人想使用它,这里有一个到 F6 的映射silent! nmap &lt;F6&gt; :SyntasticToggleMode&lt;CR&gt;
    【解决方案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>
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案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。
        • 谢谢,我用它来防止在使用 C-X C-E 编辑命令行时检查临时 bash 文件:let g:syntastic_ignore_files = ['\m^/tmp/bash-.*']
        【解决方案7】:

        您可以在整个会话期间关闭 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()
        

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

        【讨论】:

          【解决方案8】:

          作为 Jamie 和 gospes 答案的替代方案,可以通过像这样指定检查器来完全禁用检查器

          let g:syntastic_html_checkers=['']
          

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

          let g:syntastic_check_on_open = 0
          

          【讨论】:

            【解决方案9】:

            关闭检查单个缓冲区(无论文件类型如何)的另一个选项是使用: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 时特别有用。

            【讨论】:

              【解决方案10】:

              以下设置对我有用。

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

              【讨论】:

                猜你喜欢
                • 2023-03-30
                • 1970-01-01
                • 2017-11-23
                • 2019-02-03
                • 1970-01-01
                • 2015-11-09
                • 1970-01-01
                • 1970-01-01
                • 2017-12-29
                相关资源
                最近更新 更多