2013-02-08 8 views
6

Ho iniziato a utilizzare lo Syntastic plugin per Vim, che eseguirà un controllo della sintassi sul buffer corrente e quindi indicherà le righe che presentano errori. Posso aprire l'elenco degli errori come elenco delle posizioni utilizzando :Errors e quindi passare alla riga di un determinato errore toccando Immettere, che salterà alla riga contenente l'errore nel mio buffer.Passa agli errori nella lista rapida o posizione per la riga corrente in Vim (con Syntastic)

Voglio sapere come posso fare il contrario. Voglio passare da una riga nel mio buffer contrassegnata con un errore di sintassi alla voce corrispondente nell'elenco delle posizioni, in modo da poter leggere il messaggio di errore completo nell'elenco. Come posso fare questo? So che :ll [n] passerà all'errore n nella lista, ma spesso non saprò esattamente quale numero di errore corrisponde alla riga specificata nel buffer. Non riesco a trovare un comando che accetta un numero di linea, piuttosto che un numero di errore, comunque.

risposta

3

Penso che non sia possibile, almeno con i comandi Vim predefiniti o Syntastic.

Ma Syntastic in realtà echeggia il messaggio di errore associato alla riga corrente nella riga di comando. This feature is enabled by default.

+0

Syntastic sarà eco il primo messaggio di errore alla riga di comando, ma spesso il messaggio è troncato; quindi voglio saltare all'errore nella lista delle posizioni, me stesso. Il fatto che Syntastic possa recuperare messaggi di errore in base alla riga corrente nel buffer offre la speranza che sia possibile passare dal buffer alla riga di errore corrispondente nell'elenco delle posizioni. – gotgenes

+0

Purtroppo non c'è un comando per questo. Dovresti pubblicare una richiesta di funzionalità sul tracker dei problemi di Syntastic. – romainl

+0

Se si imposta la riga di comando per utilizzare 2 righe, le utilizzerà entrambe per i messaggi che aiutano molto a troncare. "set cmdheight = 2" –

6

Hai ragione, non esiste un modo integrato per scoprire quale errore è in corrispondenza o dopo la posizione corrente del cursore, anche se ciò sarebbe spesso utile. Ho scritto il QuickFixCurrentNumber plugin per quello.

Con la mappatura g<C-q>, è possibile passare alla voce nell'elenco di rapide/posizioni per la posizione corrente del cursore (o la voce successiva dopo il cursore). Offre inoltre i mapping [q/]q per passare agli errori precedenti/successivi limitando la navigazione agli errori nel buffer corrente.

1

Ho appena creato questo per il mio: Visualizzatore uomo. Tiene traccia la voce corrente nella finestra 'locationlist' durante la navigazione:

function! s:visibleLoc() 
    return len(filter(getwininfo(), {i,v -> v.loclist})) 
endfunc 

function! s:followLine() 
    let curLine = line(".") 
    if (exists("b:lastLine") && b:lastLine == curLine) || 0 == s:visibleLoc() 
     return 
    endif 
    let b:lastLine = line(".") 
    let ent = len(filter(getloclist("."), {i,v -> v.lnum <= curLine})) 
    if ent < 1 || (exists("b:lastEntry") && b:lastEntry == ent) 
     return 
    endif 
    let b:lastEntry = ent 
    let pos = [ 0, curLine, col("."), 0 ] 
    exe "ll ".ent 
    call setpos(".", pos) 
endfunc 

au CursorMoved <buffer> call <SID>followLine()