2011-09-08 13 views
7

Ho trovato il seguente codice che evidenzierà tutti gli spazi non necessari, ma voglio davvero che evidenzi tutte le schede del mio codice. Ho giocato con un sacco di variazioni che non funzionavano, ma non sono riuscito a trovare una regex che avrebbe fatto entrambe le cose. Qualche idea?Come dovrei evidenziare lo spazio bianco ridondante e tutte le schede?

highlight RedundantWhitespace ctermbg=red guibg=red 
match RedundantWhitespace /\s\+$\| \+\ze\t/ 

Edit: l'aggiunta di campioni su richiesta:

Va bene così nei campioni di seguito Sto usando \ t alla scheda e% rappresentare per rappresentare uno spazio bianco in coda che voglio vim per evidenziare in rosso.

/tOh hi here is some text%%%% 
/t/tHere is some indented text%%% 

Così sulla prima linea ci sono 1 scheda che dovrebbe avere i loro spazi evidenziato in spazi rossi e 4 finali essere evidenziati in rosso. Sulla seconda riga ci sono 2 schede e 3 spazi bianchi finali per essere evidenziati in rosso.

+0

Se è possibile fornire alcuni campioni e controcampioni che renderanno più facile abbinare detti campioni con un'espressione regolare. Sviluppo basato su test;) –

+0

Dopo aver lottato con questo devo menzionare questo deve essere in .gvimrc, non .vimrc! – philant

risposta

4

Dal tuo commento su un'altra risposta:

No Sto cercando per esso per evidenziare ogni scheda e tutti gli spazi finali. Sto davvero cercando di identificare tutte le schede

Questo fa quello che vuoi?

match RedundantWhitespace /\s\+$\|\t/ 

In termini umani, questo è:

Abbinai spazi alla fine di una riga, o qualsiasi schede ovunque

Sembra di selezionare lo spazio bianco nei tuoi esempi .

+0

L'ho appena capito e sono venuto qui per rispondere alla mia stessa domanda. Questo lo fa perfettamente. Ero abituato a regex usando | per questo ho pensato \ | stava scappando ma non lo era. In realtà era ancora un o. Ad ogni modo, ho upvoted tutti quelli che hanno presentato una risposta e apprezzo l'aiuto di tutti. Questo era quello di cui avevo bisogno. Grazie –

+0

@ John: Sì. Come hai detto tu, '\ |' è per "o" in VIM. '|' non è - è il carattere letterale. Scrivi ': help regex' ed è la prima cosa che si apre :) Questo potrebbe aiutare anche: http://vimdoc.sourceforge.net/htmldoc/usr_27.html –

+1

Invece di usare il carattere' \ | ', io troverebbe più chiaro avere due dichiarazioni di corrispondenza separate, una per gli spazi bianchi finali e una per le schede. Questo lo rende più trasparente e più facile da mantenere. Ma questa è solo la mia preferenza personale. –

8

Si consiglia di utilizzare listchars anziché l'evidenziazione della sintassi. Questo funzionerebbe su tutta la linea per tutti i tipi di file. È possibile utilizzare listchars per gli spazi finali troppo, e la mensa con i colori così:

set listchars=tab:»·,trail:· 
set list 
hi SpecialKey ctermbg=red ctermfg=red guibg=red guifg=red 

nota che lo sfondo e primo piano colori sono gli stessi qui, quindi si finisce per vedere rosso "blocchi" per la finale dello spazio e le schede .

+0

Ah, questo è un peccato. Voglio solo che i personaggi siano evidenziati in rosso e basta. Questo aggiunge un mucchio di simboli –

+0

Migliore domanda: C'è comunque un colore solido in modo che tu non possa vedere altro oltre al rosso? Significa nessun colore in primo piano? –

+0

Imposta lo stesso colore in primo piano e sullo sfondo? Ho aggiornato l'esempio sopra per farlo.I personaggi sono ancora lì, ma appaiono semplicemente come blocchi rossi a meno che non si inserisca un cursore su di essi. – overthink

1

Penso che si desidera utilizzare \zs (per "start") piuttosto che \ze (per "finire"):

highlight RedundantWhitespace ctermbg=red guibg=red 
match RedundantWhitespace /\s\+$\| \+\zs\t/ 

Che sarà comunque in evidenza solo le schede che sono preceduti da uno o più spazi, anche se . Non sono sicuro che sia quello che vuoi o no. Qui di seguito è una versione che metterà in evidenza tutte le schede:

highlight RedundantWhitespace ctermbg=red guibg=red 
match RedundantWhitespace /\s\+$\|\t/ 
+0

No, lo sto cercando per evidenziare tutte le schede e tutti gli spazi finali. Sto davvero cercando di identificare tutte le schede. –

+0

Quindi passa alla seconda versione che ho aggiunto sopra. . . –

+0

In realtà la tua versione non sembra evidenziare alcuna scheda. –