Risposte:
Risposta unificata:
Proverei a usare listchars:
:set listchars=tab:\|\
:set list
nota: c'è uno spazio dopo l'ultimo \
sopra.
Questo metodo è utile perché utilizza il supporto integrato di Vim per mostrare questo tipo di cose.
Esempio di output:
| if (1) {
| | func();
| }
Tuttavia, questo non funziona per gli spazi iniziali. Come sottolineato da @Josh Petrie, c'è una patch per lavorare con gli spazi , ma poi dovresti ricompilare Vim, che va oltre lo scopo di questa risposta.
Vaibhav Sagar sottolinea che il plugin indentLine esegue questa funzionalità.
Installa normalmente (vedi l' installazione dei plugin ) e sembra funzionare magicamente senza ulteriori input. Se non ti dispiace le barre ASCII, non devi fare nulla con i tuoi caratteri. Esempio di output del tuo esempio dopo aver impostato le impostazioni di rientro ed eseguito:IndentLinesReset
45 ¦ var move = function(direction) {
46 ¦ ¦ if(!initialized) { initialize(); }
47
48 ¦ ¦ if(shiftBoard(direction)) {
49 ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50 ¦ ¦ }
51 ¦ };
Il plug-in richiede Vim 7.3 o versioni successive e fa in modo che Cleaver utilizzi la funzione Conceal di quella versione. Invece di nascondere effettivamente il testo, sostituisce il testo con le barre nella vista, ma non il buffer effettivo. Il risultato è che vedi le barre ma non vengono salvate nel file (dato che in realtà sono spazi)
Entrambi questi metodi assumono un codice rientrato "correttamente". Non posizionano le linee di rientro a livello di rientro quando viene aperto un "blocco" (cosa che sembra sublime fare), ma invece posizionano le linee a intervalli regolari in base alle impostazioni di rientro. Inoltre, mostra solo le barre sulle linee in cui c'è effettivamente spazio (motivo per cui la linea nell'output vim sotto la prima if
non ha barre, creando uno spazio visivo)
Un'altra opzione che utilizzo, che non è esattamente quello che mi hai chiesto, ma raggiunge lo stesso scopo di rendere più facile vedere cosa c'è nella stessa colonna, è impostare quanto segue nel tuo vimrc
:
set cursorcolumn
set cursorline
Questo ha il compromesso che devi spostare il cursore sulla colonna che vuoi vedere, ma ottieni meno disordine visivo. Di solito, quando mi preoccupo dei livelli di rientro, mantengo comunque il mio posto con il cursore. Anche la mia strada non è così imbarazzante in lingue come il pitone senza chiudere le parentesi graffe.
Per completezza, c'è anche il plug-in Indent Guides , che mostra i livelli di rientro alternando i colori degli spazi bianchi. Richiede la versione 7.2 o successive. Poiché utilizza le variabili tabstop
e shiftwidth
, probabilmente funzionerà immediatamente per le impostazioni di rientro.
Una volta installato il plugin, puoi semplicemente usare :IndentGuidesEnable
o :IndentGuidesDisable
. Se si utilizza Terminal Vim, notare che, secondo il manuale,
Al momento Terminal Vim ha solo il supporto di base. Ciò significa che i colori non verranno calcolati automaticamente in base al proprio schema di colori. Invece, vengono utilizzati alcuni colori predefiniti a seconda che lo sfondo sia impostato su scuro o chiaro.
Per cambiare i colori delle guide per lo screenshot, ho usato quanto segue
let g:indent_guides_auto_colors=0
quindi i colori non vengono ricalcolati quando i buffer vengono scambiati, quindi impostare i colori usando
hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236
Come con le altre soluzioni presentate, mostra solo le guide di rientro su linee dove ci sono spazi.
let g:indent_guides_enable_on_vim_startup=1
al mio .vimrc per abilitarlo all'avvio.
Ho trovato il plugin indentLine per essere il migliore per questo. Hai bisogno di un font con i simboli appropriati però, trovo che Consolas su Windows e Menlo su Mac OS X funzionino bene. Come sottolineato nella risposta unificata sopra, funziona usando (ab) usando la conceal
funzione di vim per posizionare le barre verticali (dal font usato) nel posto giusto. Sono abbastanza contento di questa soluzione, ma lo svantaggio è che le mie barre verticali fanno parte dei glifi di disegno a scatola e sono allineati al centro anziché allineati a sinistra come in altri editor. Mi ci sono abituato, ma può essere risolto riparando manualmente il font o usando un font come Fantasque Sans Mono (nota come gli screenshot nel repository github collegato usano indentLine).
Il plug-in indentLine tende ad essere abbastanza lento su file non piccoli, osservabile quando si fa clic su Invio in quanto è in ritardo di circa un secondo.
Ho trovato vim-indentguides come un plugin più veloce e visivamente simile, che distingue visivamente anche i rientri di tabulazione rispetto a quelli spaziali.