VIM + Syntastic: como desabilitar o verificador?

119

Estou usando o Syntastic, que está habilitado para meus arquivos HTML. Como tenho um arquivo muito grande com verificadores "validator w3" habilitados, o GVIM ou VIM ficou muito lento ao salvar o arquivo (: w).

É possível desativar a sintaxe temporariamente apenas para a sessão atual?

Yves Lange
fonte
3
tentativalet g:syntastic_disabled_filetypes=['html']
yakiang

Respostas:

166

Usando :SyntasticToggleModevocê pode alternar o Syntastic para o modo passivo, o que desativará a verificação automática. Em seguida, você pode verificar um arquivo executando :SyntasticCheck.

Para mais, veja :help syntastic-commands

Por outro lado: se o Syntastic for lento para você, considere tentar cerveja como alternativa. Ao contrário do Syntastic, ele é executado de forma assíncrona, portanto, mesmo que seja lento, não deve atrapalhar você.

Jamie Schembri
fonte
1
Existe alguma maneira de criar um único alias ou mapear uma chave para alternar isso? :errorOu seja, ou Ctrl + Shift / Alt + e alterna entre :SyntasticChecke :SyntasticToggleMode.
yoaquim
2
Você pode criar um alias como este no .vimrc: :command Sd SyntasticToggleMode Então, no vi, pressione: Sd e ele irá desativar a sintaxe. Mais informações sobre como fazer isso aqui: stackoverflow.com/questions/3878692/aliasing-a-command-in-vim
Eric Leschinski
2
legais. aqui está um mapeamento para F6 se alguém quiser usá-losilent! nmap <F6> :SyntasticToggleMode<CR>
lfender6445
88

Desativei o Syntastic por padrão e ativei / desativei a verificação de erros com o seguinte em meu .vimrc:

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

Quando preciso usar a verificação de erros, simplesmente pressiono: ctrl-w E

gospes
fonte
Isso é muito útil, obrigado .. Eu adicionei a ideia à minha configuração. +1
jdt de
3
Eu adicionei isso ao meu .vimrctambém. No entanto, se eu pressionar Ctrl-w E o Syntastic aparecerá por um segundo e desaparecerá novamente. Alguma ideia do que está acontecendo de errado e / ou como rastrear isso?
Anticom
Acho que o mapeamento não deveria ter: SyntasticToggleMode <CR>, removendo isso deve resolver seu problema @Anticom.
Achal Dave
@AchalDave Não consertou para mim.
Anticom
Hm, não faço ideia. Aqui está a aparência das minhas configurações de sintaxe: github.com/achalddave/dotfiles/blob/…
Achal Dave
33

Alternativa às respostas de Jamie e Gospes, pode-se desativar o verificador completamente especificando-o da seguinte maneira:

let g:syntastic_html_checkers=['']

Certifique-se também de que o syntastic_check_on_opennão está definido como 1, o que irá contra-ordenar a linha acima:

let g:syntastic_check_on_open = 0
chutsu
fonte
10

Você pode desligar o Syntastic durante toda a sessão (conforme respondido por Jamie Schembri ), mas se for apenas um problema com um "arquivo muito grande", você pode querer desativar apenas um buffer.

Alguns dos arquivos em que trabalho no meu trabalho são irremediavelmente incompatíveis com PSR. A maioria funciona bem. Eu estava procurando uma funcionalidade para desativar o Syntastic apenas para aqueles arquivos problemáticos. Uma forma mais simples da solução ' SyntasticDisableToggle ' descrita pelo contribuidor principal funciona para mim:

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

Como isso não afeta outros buffers, posso continuar usando este plugin incrível para quaisquer outros arquivos (parcialmente) compatíveis que abri.

Ssteele
fonte
6

Isso não aborda diretamente a questão, mas pode ajudar além da sessão atual. Se você tem um arquivo que precisa editar com frequência, mas sabe que sempre deseja desativar o Syntastic (por exemplo, ele tem milhares de erros e você não pretende corrigi-los, e deixá-lo ativado resulta na lentidão da interface do usuário), então permanentemente colocar na lista negra é muito conveniente.

Para fazer isso, use a syntastic_ignore_filesopção. Ele está escondido na ajuda, mas você pode usar regexes com esse recurso para adicionar arquivos à lista negra.

                                                    '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$']
Steven Lu
fonte
1
Funciona bem! Não o que a pergunta estava pedindo, no entanto. Aqui está um +1 por ser útil.
bschlueter
5

As configurações a seguir funcionaram para mim.

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'}
Koshyg
fonte
4

Outra opção para desativar a verificação de um único buffer (independentemente do tipo de arquivo) é usar :let b:syntastic_mode="passive". Uma vez que não é um botão de alternância, ele funcionará mesmo se o buffer estiver no modo passivo.

Se desejar desativar temporariamente a verificação de todos os tipos de arquivos em todos os buffers, você pode usar :bufdo let b:syntastic_mode="passive". Configurei mapeamentos para desligar / ligar a verificação de todos os buffers:

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

Isso é particularmente útil ao fazer :wqacom muitos buffers abertos.

Mark Grimes
fonte
4

Similarmente aos mencionados por alguns outros, aqui está um segmento vimrc que desligará o Syntastic por padrão, mas mapeia um botão (aqui, F10) para verificar o arquivo atual e usa o mesmo botão como alternador para desligar as verificações. É um pouco lento, mas funciona.

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>
nothijngrad
fonte
0

Obrigado por Steven Lu , posso ignorar os arquivos de Ansible Roles , agora.

" ignore files of Ansible Roles.
let g:syntastic_ignore_files = ['\m^roles/']
Chu-Siang Lai
fonte
0

Estou usando Ale e Syntastic principalmente porque o suporte a Rust Ale ainda não é muito bom. No meu caso, estou usando o gerenciador de pacotes vim-plug, eu configurei de forma que ele não habilite nenhum deles automaticamente. Em vez disso, uso uma estratégia de alternância.

No meu caso, quero Ale por padrão e Syntastic for Rust

Na parte do plugin do vimrc eu fiz isso

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

Depois, eu defino um vínculo para habilitar o linter, (eu uso l como mnemoic para o linter)

nnoremap <leader>l :ALEToggle<CR>

Para Rust eu substituo o mesmo vínculo

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

Também tive que remover o statusline do meu vimrc, caso contrário, recebo erros ao carregá-lo com o Syntastic desativado

" 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

Saudações

lagartixas
fonte