Come aggiungere guide / linee di rientro


42

In Sublime Text 2, ottieni guide verticali in cui si trova il rientro, in questo modo:

Schermata del testo sublime

ma ovviamente non lo faccio:

screenshot di Vim

C'è un modo per mostrare linee come quelle in vim? A proposito, il mio rientro è di 2 spazi.

:set tabstop=2 softtabstop=2 shiftwidth=2 expandtab

Risposte:


39

Risposta unificata:

Se stai usando le schede

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();
|       }

screenshot dell'esempio di testo sopra

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.

Se stai usando spazi e non ti dispiace usare un plugin

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   ¦ };

screenshot di esempio con spazi

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)

Avvertimento

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 ifnon ha barre, creando uno spazio visivo)


In realtà, sto usando gli spazi per rientrare anziché le schede. Ho aggiornato la mia domanda.
aharris88,

Oh. Bene, ciò richiederà ulteriori ricerche.
John O'M.

1
C'è una patch per far funzionare listchar per spazi non finali, che puoi scavare nella mailing list. Tuttavia, non è stato accettato nella distribuzione ufficiale :(

1
Risposta aggiornata per includere informazioni da Vaibhav Sagar e Josh Petrie. Ho provato il plug-in Vaibhav menzionato e mostra i risultati nella risposta modificata. Penso che inizierò a utilizzare questo plugin da solo. Non è fantastico, ma in generale sembra funzionare abbastanza bene.
John O'M.

1
indentLine funziona bene per python, json, viml, c, c ++, ecc. Ma sfortunatamente non funziona con vim-javascript, quindi vim-indent-guide invece.
Sassan,

19

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

illustrazione di cursorecolonna

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.


Gli utenti di Python vi moriranno per questa funzione
shuva

18

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 tabstope shiftwidth, probabilmente funzionerà immediatamente per le impostazioni di rientro.

Imgur

Una volta installato il plugin, puoi semplicemente usare :IndentGuidesEnableo :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.


aggiungi let g:indent_guides_enable_on_vim_startup=1al mio .vimrc per abilitarlo all'avvio.
Inye

9

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 concealfunzione 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).


4
Dai un'occhiata alla nostra discussione sulle risposte solo per i collegamenti al plugin e considera l'aggiornamento della tua risposta con ulteriori informazioni.

Errore mio, ho aggiornato la mia risposta.
Vaibhav Sagar,

Quale glifo è la linea verticale rattoppata? Puoi incollarlo qui? Grazie.
Timtro

2

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.

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.