Visualizzazione delle schede come caratteri


119

Quando lavoro su file in Python, a volte confondo le schede per gli spazi e viceversa. C'è un modo in cui posso far visualizzare a Vim un personaggio per una scheda anziché una scheda?


Proprio come una nota a margine, è possibile configurare per convertire tutte le schede in spazi retabogni volta che si salva il file.
0xc0de

Se hai installato vim-faq , puoi ottenere una risposta offline lì: :h vim-faqe cerca /invisible. Il tag difficile da memorizzare è :h faq-19.8.
Hotschke,

Risposte:


119

Sì, utilizzare listchars:

set list
set listchars=tab:>-

Se inserisci queste due righe nel tuo .vimrc, le schede verranno mostrate come >per la posizione iniziale e -attraverso il resto della scheda.

(Sidenote: listchars può anche mostrare spazi finali trail:x(sostituisci xcon il carattere che vuoi usare per uno spazio finale), che può anche essere utile.)


6
Nota: mi piace usare set listchars=tab:!·,trail:·, IMHO ·è molto più chiaro di un -... Hai bisogno di una versione Vim abbastanza recente per farlo funzionare tra l'altro (non sono sicuro che esattamente, penso 7.3.x) ...
Martin Tournoij

8
Mi piace usare il carattere Unicode in quanto è leggermente più piccolo di >. Attualmente vedo uno spazio bianco in coda contrassegnando l'eol (anche se potrei provare quanto sopra). Le mie impostazioni sono: set listchars=eol:¬,tab:▸\ e
Martin York,

58

La risposta di base è :set listche fa apparire le schede come ^I.

Tuttavia, consiglio di andare oltre. È solo :set listproblematico in quanto non riesce a preservare l'allineamento visivo sullo schermo. Per esempio:

%.o: %.cpp
^Ig++ -c $<

non sembra buona, soprattutto quando ci si aspetta il gdi g++di apparire sotto la prima pdelle cpp(assumendo tabstop=8).

Pertanto, ti suggerisco .vimrcdi inserire qualcosa del tipo :set listchars=tab:␉· (Per essere chiari, questo è il carattere Unicode U + 2409 SIMBOLO PER TABULAZIONE ORIZZONTALE seguito da U + 00B7 MIDDLE DOT .)

Come spiegato in :help listchars, un'impostazione a due caratteri per tab:xymantiene l'allineamento visivo:

tab:xy        Two characters to be used to show a tab.  The first
              char is used once.  The second char is repeated to
              fill the space that the tab normally occupies.
              "tab:>-" will show a tab that takes four spaces as
              ">---".  When omitted, a tab is show as ^I.

L'esempio sopra appare sullo schermo come:

%.o: %.cpp
␉·······g++ -c $<

Personalmente, vado a tutto campo con il mio listchars:

:set listchars=eol:⏎,tab:␉·,trail:␠,nbsp:⎵

Questi personaggi sono abbastanza distintivi da apparire raramente letteralmente nel testo del documento.

Per digitare questi caratteri speciali nel tuo vimrc, digita Ctrl-vu23CEin modalità Inserisci, come spiegato in :help utf-8-typing.


2
Vedi ancheset lcs=tab:├─
sch

questo mi ha appena dato un? a eol
WendyG

14

Evidenziazione delle schede

TabEvidenziazione temporanea

Per un uso occasionale, si può semplicemente evidenziare tutte le schede in un documento usando il seguente /comando di ricerca :

/\t

Per rimuovere l'evidenziazione, digita semplicemente l' :nohabbreviazione di: :nohlsearchnessuna illuminazione elevata.

TabEvidenziazione permanente

" Highlight tabs as errors.
" https://vi.stackexchange.com/a/9353/3168
match Error /\t/

Evidenziazione della scheda in vim

Più evidenziazione

Per ulteriori informazioni su questi utili comandi di evidenziazione — compreso il combinato con lo spazio bianco finale e il rendere permanente questo — vedere il wiki di Vim .


4
Puoi anche usare :match Error /\t/per evidenziare le schede (o qualsiasi altro motivo per quella materia) indipendentemente dal registro di ricerca e hlsearch (digita :matchper cancellarlo).
Martin Tournoij,

1
@Carpetsmoker Uno può trovare molti più di questi utili comandi di evidenziazione (incluso in combinazione con spazi bianchi finali!) Sul wiki di Vim sull'evidenziazione di spazi indesiderati .
Serge Stroobandt,

9

Personalmente mi piace l'uso del plug-in indentLine , che mostra una linea verticale a livello di rientro.

È di grande aiuto soprattutto in Python, dove il rientro è importante.

(Immagine presa dal link sopra)

Tra le altre cose, fornisce un comando di attivazione / disattivazione, che può essere mappato su una combinazione di tasti, in modo da poterlo disattivare, quando non è necessario.


2
Credo che questo plugin sia inteso per il rientro degli spazi?
Jake Byman,

5

Potresti voler mostrare le schede in modo diverso in un normale terminale e gvim.

set list!
if has('gui_running')
    set listchars=tab:▶\ ,trail:·,extends:\#,nbsp:.
else
    set listchars=tab:>.,trail:.,extends:\#,nbsp:.
endif

(Aggiungendo per completezza, nel caso in cui altri lo trovino utile).


4

Il metodo più semplice è fare :set list, che mostrerà le schede come ^Ie la fine della riga come $.

Mi piace usare una mappatura che chiama

:set invlist 

per alternare tra visualizzazione normale e visualizzazione elenco.

Per esempio:

:nmap <leader>l :set invlist<cr>

Questo mi permette di verificare rapidamente se ci sono problemi di tabulazione vs spazio e quindi tornare a una visualizzazione normale.

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.