Come usi la funzione di correzione rapida di vim?


125

Sono un nuovo utente di Vim e ho scoperto che la sua curva di apprendimento è piuttosto ripida (almeno per me). Ho appena installato questo script vim per il controllo degli errori JavaScriptLint, che mostra gli errori nella finestra quickfix di vim una volta salvato un buffer.

Tuttavia, non so cosa fare dopo .. Come faccio a "scorrere" tutti gli errori? Come si chiude la "finestra" di quickfix? Come posso ottenerlo per verificare la presenza di errori dopo aver apportato modifiche al mio codice?

Ho guardato i documenti di vim quickfix ma la quantità di comandi è schiacciante e non riesco a trovare quello che voglio. Qualsiasi aiuto sarebbe apprezzato.

Una domanda a margine: esiste un modo per fare in modo che javascriptlint controlli gli errori js per il codice che risiede in un file .html?

Grazie!

Risposte:


148

Ci sono molti comandi per la correzione rapida come hai detto, ma tendo a scoprire che ne uso solo un piccolo sottoinsieme:

:copen " Open the quickfix window
:ccl   " Close it
:cw    " Open it if there are "errors", close it otherwise (some people prefer this)
:cn    " Go to the next error in the window
:cp    " Go to the previous error in the window
:cnf   " Go to the first error in the next file
:.cc   " Go to error under cursor (if cursor is in quickfix window)

Tendo ad usarlo con :makee :vimgrep, quindi non posso commentare il controllo lanugine Javascript, ma questo dovrebbe darti qualcosa per iniziare.

Per quanto riguarda l'uso generale di JavascriptLint, non sono un programmatore javascript, ma sembra che lo script esponga una funzione chiamata "JavascriptLint", quindi se vuoi chiamarla manualmente, puoi usare :call JavascriptLint(). Tuttavia, funziona sulla copia su disco del file, quindi dovrà essere salvato prima. Se (e solo se) la riga di comando jslfunziona su file html, dovresti essere in grado di utilizzare :call JavascriptLint()su un file html per controllare il javascript interno. Potresti anche fare:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

per automatizzarlo. Se jslnon supporta i file html, quindi (a meno di patchare l'applicazione o chiedere all'autore di cambiarla), è probabilmente una causa persa ...


Grazie, quei comandi sono un buon inizio, dovrò solo giocare un po 'e abituarmi a come funziona. Se uso: cn per andare a un errore nella finestra qf, posso saltare alla finestra con il mio codice senza uscire dalla finestra qf? Può saltare alla riga che ha un errore? E il tuo suggerimento di usare: call funziona, tuttavia segue i collegamenti <script src> che non è quello che voglio.
hora

@ hora: :cnnon dovresti chiudere la finestra qf, ma passerà alla finestra contenente l'errore: è questo che intendi con "jump"? Puoi tornare rapidamente indietro con Ctrl-W po :wincmd p, così puoi fare :command! CN :cn | wincmd p<CR>o qualcosa del genere (non testato). Questo dovrebbe darti un :CNcomando che va all'errore successivo senza uscire dalla finestra di correzione rapida. In alternativa puoi fare qualcosa di simile :au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(ancora non testato) e usare Invio per selezionare un errore senza uscire dalla finestra di correzione rapida.
DrAl

1
Per un principiante "Potresti anche fare: 'somecodehere' per automatizzarlo" non significa molto. Significa che la riga di codice mostrata deve essere inserita in ~ / .vimrc (_VIMRC su Windows AFAIK) e dal successivo avvio di VIM ogni volta che il file viene salvato questo comando verrà richiamato. Destra?
Беров

63

Il modo più semplice per navigare nell'elenco delle correzioni rapide (o nell'elenco delle posizioni, se è per questo) è il unimpairedplug-in .

Una volta che viene compilata la finestra quickfix, [qe ]qandare avanti e indietro (rispettivamente) nella lista quickfix. [Qe ]Qvai all'inizio e alla fine (il che è particolarmente utile se hai solo un elemento nell'elenco; questo fa lamentare vim di [qe ]q). Quindi il flusso di lavoro è:

  1. Esegui qualsiasi comando che popola l'elenco di quickfix
  2. Digita [Qper andare al primo elemento
  3. Scorrere le voci successive (se presenti) con [qe]q

Se stai usando Syntastic, otterrai l'elenco delle posizioni invece dell'elenco delle correzioni rapide. Nessun problema; solo l'uso [L, ]L, [l, e ]lnello stesso modo.

unimpairedha anche un sacco di altre mappature utili - [ee ]e"bolle" su e giù, [<Space>e ]<Space>inserisce righe vuote sopra e sotto, ecc. Sono rimasto sorpreso che nessuno lo abbia menzionato qui prima; probabilmente è perché non esisteva fino a gennaio 2010, anche se la domanda è stata posta nel 2009.


27

Inserisci le seguenti due righe nel tuo file .vimrc:

map <C-j> :cn<CR>
map <C-k> :cp<CR>

Ora puoi navigare tra gli errori usando ctrl-j e ctrl-k, che imita i comandi di movimento su e giù standard j e k.


1
<c-j>a volte (dipende dal terminale ?!) è errato o del tutto non funzionante, perché significa lo stesso di <NL> // il più facile da usare <c-n>e <c-p>invece // altrimenti: stackoverflow.com/questions/8304421/…
eli

Ho deciso di usare F8 e F9, in questo modo: noremap <F7> :cprevious<CR>e noremap <F8> :cnext<CR>in.vimrc
Flimm

Uso già <C-j>e <C-k>per navigare tra le suddivisioni di vim e i riquadri tmux con vim tmux navigator . Le combinazioni <C-M-j>e <C-M-k>potrebbero essere un'alternativa.
Paul Rougieux,

24

Puoi anche usare :cc 2(o qualsiasi altro numero) per saltare, in questo caso, al secondo errore nella finestra di correzione rapida. Navigazione con :cn, :cc 4ecc metterà il cursore sulla linea in questione.


8

Il modo migliore per integrare il controllo della sintassi JavaScript è usare il plugin Syntastic Vim , che utilizza la finestra dell'elenco delle posizioni di Vim (che è parallela alla correzione rapida ).

Ho scritto le risposte per questa domanda e questa domanda che spiega come farlo, oltre a come ottenere la navigazione / tag-list del codice sorgente per Vim utilizzando jshint.com guidato dalla comunità (che è molto meglio di JSLint IMO) e DoctorJS di Mozilla (precedentemente jsctags ).


8

Forse questa opzione non esisteva quando questa domanda è stata scritta (o forse mi imbarazzo perché c'è qualcosa nel mio .vimrcche lo fa accadere) ma quando ottengo un Quickfix List, lo navigo semplicemente con je kpoi premo <CR>(cioè il tasto Invio) per passare a quella posizione nel file.

Quindi, per tornare alla Quickfix Listdigitazione Ctrl+ W jper "sposta in basso una finestra" e sono tornato.

Alla fine, quando ho finito, digito :q, come se chiudessi una normale finestra.


È quello che vorrei fare, ma ottengo "Impossibile apportare modifiche, 'modificabile' è disattivato".
rtf

1
Probabilmente hai sovrascritto il tuo tasto Invio. Ad esempio nmap <CR> o<Esc>, ho potuto aggiungere nuove righe in modalità normale.
Taavi Ilves

6

la finestra di correzione rapida funziona principalmente come qualsiasi altra finestra di vim: j su una riga, k su una riga,: cn per passare all'errore / avviso successivo, ecc.

sperimentare!


1
+1 per la sperimentazione, è così che ho imparato tutto.
hora

4

Oltre all'ottima risposta di @DrAl su come aprire e chiudere la finestra rapida e navigare tra le voci, ho creato un'immagine per mostrare alcuni degli altri comandi di navigazione di correzione rapida.

Ogni gruppo di 3 file di seguito rappresenta una serie di risultati di quickfix, ad esempio da un vimgrep. cnewer e cold sono per passare attraverso set di risultati storici. inserisci qui la descrizione dell'immagine

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.