VIM + Syntastic: come disabilitare il checker?


119

Sto usando Syntastic che è abilitato per i miei file HTML. Dato che ho un file molto grande con i checker "validator w3" abilitati, GVIM o VIM sono diventati molto lenti durante il salvataggio del file (: w).

È possibile disattivare temporaneamente la sintassi solo per la sessione corrente?


3
provalet g:syntastic_disabled_filetypes=['html']
yakiang

Risposte:


166

Usando :SyntasticToggleModepuoi attivare Syntastic in modalità passiva, che disabiliterà il controllo automatico. È quindi possibile controllare un file eseguendo :SyntasticCheckinvece.

Per ulteriori informazioni, vedere :help syntastic-commands

In un'altra nota: se Syntastic è lento per te, considera di provare la birra come alternativa. A differenza di Syntastic, funziona in modo asincrono, quindi anche se è lento non dovrebbe ostacolarti.


1
C'è un modo per creare un singolo alias o mappare una chiave per attivarlo? Cioè, :erroro Ctrl + Maiusc / Alt + e alterna tra :SyntasticChecke :SyntasticToggleMode.
yoaquim

2
Puoi creare un alias come questo nel .vimrc: :command Sd SyntasticToggleMode Quindi in vi premere: Sd e disabiliterà syntastic. Maggiori informazioni su come farlo qui: stackoverflow.com/questions/3878692/aliasing-a-command-in-vim
Eric Leschinski

2
simpatico. ecco una mappatura su F6 se qualcuno vuole usarlosilent! nmap <F6> :SyntasticToggleMode<CR>
lfender6445

88

Ho disabilitato Syntastic per impostazione predefinita e attivo / disabilitato il controllo degli errori con quanto segue nel mio .vimrc:

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

Quando devo utilizzare il controllo degli errori, premo semplicemente: ctrl-w E


Questo è abbastanza comodo, grazie .. Ho aggiunto l'idea alla mia configurazione. +1
jdt

3
L'ho aggiunto anche al mio .vimrc. Tuttavia, se premo Ctrl-w E Syntastic si apre per un secondo e scompare di nuovo. Qualche idea su cosa non va e / o su come rintracciarlo?
Anticom

Penso che la mappatura non dovrebbe avere: SyntasticToggleMode <CR>, rimuoverlo dovrebbe risolvere il tuo problema @Anticom.
Achal Dave

@AchalDave non ha risolto il problema per me.
Anticom

Hm, nessuna idea. Ecco come appaiono le mie impostazioni sintastiche: github.com/achalddave/dotfiles/blob/…
Achal Dave

33

In alternativa alle risposte di Jamie e Gospes, è possibile disabilitare completamente il correttore specificando il correttore in questo modo:

let g:syntastic_html_checkers=['']

Assicurati anche che syntastic_check_on_opennon sia impostato su 1, che annullerà la riga sopra:

let g:syntastic_check_on_open = 0

10

Potresti disattivare Syntastic per l'intera sessione (come risposto da Jamie Schembri ), ma se è solo un problema con l'unico "file molto grande", potresti voler disabilitare solo un buffer.

Alcuni dei file su cui lavoro nel mio lavoro sono irrimediabilmente non conformi a PSR. La maggior parte funziona bene. Stavo cercando funzionalità per disabilitare Syntastic solo per quei file problematici. Una forma più semplice di ' soluzione SyntasticDisableToggle " delineata dal collaboratore principale funziona per me:

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

Poiché ciò non influisce sugli altri buffer, posso continuare a utilizzare questo fantastico plug-in per qualsiasi altro file (parzialmente) compatibile che ho aperto.


6

Questo non risolve direttamente la domanda, ma può aiutare oltre la sessione corrente. Se hai un file che devi modificare spesso ma che sai che vorrai sempre disabilitare Syntastic su (ad esempio ha migliaia di errori e non intendi correggerli, e lasciarlo acceso si traduce in rallentamento dell'interfaccia utente), quindi in modo permanente l'inserimento nella lista nera è molto conveniente.

Per fare ciò, usa l' syntastic_ignore_filesopzione. È nascosto nella guida, ma puoi usare le espressioni regolari con questa funzione per inserire nella lista nera i file.

                                                    '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
Funziona alla grande! Non quello che la domanda stava chiedendo però. Ecco un +1 per essere utile.
bschlueter

5

Le seguenti impostazioni hanno funzionato per me.

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

Un'altra opzione per disattivare il controllo di un singolo buffer (indipendentemente dal tipo di file) è usare :let b:syntastic_mode="passive". Poiché non è un interruttore, funzionerà anche se il buffer è attualmente in modalità passiva.

Se vuoi disattivare temporaneamente il controllo di tutti i tipi di file in tutti i buffer, puoi usare :bufdo let b:syntastic_mode="passive". Ho impostato le mappature per disattivare / attivare il controllo di tutti i buffer:

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

Ciò è particolarmente utile quando si lavora :wqacon molti buffer aperti.


4

Analogamente a quelli menzionati da pochi altri, ecco un segmento vimrc che disattiverà Syntastic per impostazione predefinita, ma mappa un pulsante (qui, F10) per controllare il file corrente e utilizza lo stesso pulsante come interruttore per disattivare i controlli. È un po 'lento, ma funziona.

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

Grazie per Steven Lu , posso ignorare i file di Ansible Roles , ora.

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

0

Sto usando Ale e Syntastic principalmente perché il supporto di Rust Ale non è ancora molto buono. Nel mio caso sto usando il gestore di pacchetti vim-plug, ho configurato in modo che non abiliti nessuno di questi automaticamente. Uso invece una strategia di commutazione.

Nel mio caso voglio Ale per impostazione predefinita e Syntastic per Rust

Nella parte plugin di vimrc l'ho fatto

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

Successivamente ho impostato un bind per abilitare linter, (io uso l come mnemoic per linter)

nnoremap <leader>l :ALEToggle<CR>

Per Rust io sovrascrivo lo stesso legame

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

Inoltre ho dovuto rimuovere le cose della statusline dal mio vimrc altrimenti ottengo errori durante il caricamento con Syntastic disabilitato

" 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

Saluti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.