Navigazione della posizione dell'errore in Vim Syntastic


11

Ho installato Syntastic in Vim e sta trovando errori perfettamente (principalmente nel codice Python su cui sto lavorando). Se salto normalmente nel file, vedo gli errori nella barra di stato quando il cursore si trova su una riga pertinente.

Quello che non riesco a capire è come navigare direttamente tra gli errori.

Capisco che sintetico sta caricando gli errori in un elenco di posizioni Vim e posso farlo apparire con :lopen, passare a quella finestra, scegliere una linea e premere Entered essere portato alla finestra principale sulla linea giusta.

Quello che vorrei fare, però, non è aprire l'elenco, semplicemente modificare il file con errori e premere una scorciatoia da tastiera per passare ovunque sia il prossimo avviso / errore.

È possibile? I documenti indicano che :lNexte :lprevioussono rilevanti, ma mi ottengono E553: No more items.

Risposte:


12

:lne[xt]e :lp[revious]sono le scorciatoie corrette.

Ma :lN[ext]non è lo stesso di :lne[xt]: è un'alternativa a :lp[revious].

Il messaggio che ricevi è dovuto al fatto che questi comandi non vanno a capo quando raggiungi l'ultimo o il primo errore.

I comandi che hai elencato nella tua domanda saltano entrambi all'errore precedente, ma è probabile che tu sia già sul primo errore e non c'è niente prima . usa i comandi giusti, tieni presente che non si avvolgono e sarai bravo.

Leggi :h location-listper un elenco completo di comandi.


C'è un modo per farli avvolgere?
BallpointBen,

No, non c'è modo di farli avvolgere. Ci sono varie soluzioni basate su wrapper in questo thread e altro sotto forma di plugin. Il mio plugin vim-qf ha quelli . L'implementazione è qui se non si desidera un plug-in completo solo per un paio di mappature.
romainl

6

Se nell'elenco è presente un solo problema, :llaccederai ad esso.

Ecco una correzione per il tuo .vimrc che renderà le chiavi mappate :lnexte :lprevfunzionerà correttamente nel caso di un solo problema (saltando su di esso). Cambia le nmappings alla fine nella sequenza di tasti preferita.

(da https://github.com/scrooloose/syntastic/issues/32 )

" Fix syntastic error jumping
function! <SID>LocationPrevious()
  try
    lprev
  catch /^Vim\%((\a\+)\)\=:E553/
    llast
  endtry
endfunction

function! <SID>LocationNext()
  try
    lnext
  catch /^Vim\%((\a\+)\)\=:E553/
    lfirst
  endtry
endfunction

nnoremap <silent> <Plug>LocationPrevious    :<C-u>exe 'call <SID>LocationPrevious()'<CR>
nnoremap <silent> <Plug>LocationNext        :<C-u>exe 'call <SID>LocationNext()'<CR>
nmap <silent> e[  <Plug>LocationPrevious
nmap <silent> e]  <Plug>LocationNext

Questo è brutto se eseguito prima che l'elenco di posizioni sia popolato per la prima volta, o dopo la popolazione senza errori. Vedi la mia risposta per una correzione.
Tom Hale,



0

Consenti avvolgimento dalla prima all'ultima posizione dell'errore (e viceversa):

" Allow :lprev to work with empty location list, or at first location
function! <SID>LocationPrevious()
  try
    lprev
  catch /:E553:/
    lfirst
  catch /:E\%(42\|776\):/
    echo "Location list empty"
  catch /.*/
    echo v:exception
  endtry
endfunction

" Allow :lnext to work with empty location list, or at last location
function! <SID>LocationNext()
  try
    lnext
  catch /:E553:/
    lfirst
  catch /:E\%(42\|776\):/
    echo "Location list empty"
  catch /.*/
    echo v:exception
  endtry
endfunction

Ciò rileva i seguenti errori:

E42: No Errors
E776: No location list

E dice docilmente: Location list empty

(Credito a lcd074 )


In realtà, esiste una soluzione meno ripetitiva, ma potrebbe avere a che fare con l'eco "Elenco posizioni vuoto" `.
Tom Hale,

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.