Mostra gli spazi finali in vim


11

Mi piacerebbe avere una bella e dolce esposizione di spazio bianco finale nel mio terminale VIM. Ciò mi consentirebbe di rimuoverli prima di chiudere il file.

Sono consapevole che questa domanda è piuttosto popolare e ho già trovato dozzine di risposte su SO. Purtroppo non ne ho ancora trovato uno soddisfacente ...

Quindi cercherò di riassumere le informazioni raccolte e le soluzioni che ho trovato.

Soluzione 1: evidenziare manualmente gli spazi finali

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

Evidenzia gli spazi bianchi finali

Professionisti:

  • Facile da usare
  • Veloce
  • Compatibile con cursorline

Contro:

  • Colore scelto non compatibile con altre combinazioni di colori perché il colore è impostato manualmente su red
  • I grandi blocchi di sfondo rosso non sono molto estetici

Soluzione 2: utilizzo della funzione elenco

set list
set listchars+=trail:◦

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Professionisti:

  • Facile da usare
  • Veloce

Contro:

  • Emettere se :set cursorlineabilitato
  • Il colore dedicato per list/trailnon è configurabile. Deve essere uguale agli altri listchar

Soluzione 3: utilizzo della funzione di occultamento

syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2 
set concealcursor=nv
highlight Conceal ctermfg=red

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Professionisti:

  • Più bella della prima soluzione

Contro:

  • Lo sfondo non è uguale allo sfondo della linea del cursore
  • Può interferire con altre regole nascoste
  • Colore scelto non sempre compatibile con la combinazione di colori
  • Non compatibile con la versione precedente di Vim

La mia domanda

Quale delle soluzioni elencate è la più adatta in termini di prestazioni e compatibilità e come posso ottenere tutti i pro e nessuno dei contro?

In altri termini, vorrei trovare una soluzione in cui:

  • Il colore finale dell'evidenziazione concorda con il colore scelto
  • Questo colore è chiaramente visibile ma non troppo aggressivo per gli occhi
  • Compatibile con cursorline(sfondo e primo piano) `
  • Compatibile con altri plug-in che potrebbero utilizzare occultamento
  • Il carattere finale può essere impostato su qualsiasi carattere Unicode

Se non ti piace il rosso, scegli un colore diverso. Se si desidera che il colore sia compatibile con diverse combinazioni di colori, quindi collegarsi al nome di un gruppo di colori anziché utilizzare un colore particolare, ad es :hi link ExtraWhitespace CursorLine. Vedere :help hi-link.
garyjohn,

Risposte:


4

In termini di prestazioni, nessuna di queste dovrebbe fare la differenza. Vim viene impantanato principalmente da schemi di sintassi complessi; il modello qui è abbastanza semplice.

Per far coincidere il colore di evidenziazione con il sistema di colori scelto, utilizzare :hi linkper un gruppo esistente; di solito, sarebbe Error. Ovviamente, tutto ciò è importante solo se si cambiano spesso (abbastanza diversi) schemi di colore; altrimenti, usare direttamente i colori adatti (come nella soluzione 1) andrebbe bene.

Soluzione 1: evidenziare manualmente gli spazi finali

Vorrei per questo, ma usando matchadd()invece di :match; questo lascia quest'ultimo per l'evidenziazione personalizzata. Inoltre, clearmatches()è troppo grossolano; elimina tutte le corrispondenze e pertanto può influire sui plug-in. Puoi usare / dare un'occhiata al mio plug-in ShowTrailingWhitespace per un'implementazione pulita e potente (che include anche eccezioni per alcuni tipi di file). Sì, è una soluzione molto più grande, ma non ho ancora notato alcun impatto.

Soluzione 2: utilizzo della funzione elenco

Questa è una funzione utile in sé, e tenerla attiva in modo permanente ha effetti sul posizionamento del cursore sui caratteri Tab, quindi non lo consiglierei.

Soluzione 3: utilizzo della funzione di occultamento

Ciò interferirà sicuramente con alcune sintassi e plugin usando la funzione. Cattiva idea.


Quindi, dalla tua risposta capisco che esiste una soluzione così che consente di utilizzare un carattere Unicode personalizzato per contrassegnare spazi aggiuntivi. Questa domanda è davvero più complicata di quanto inizialmente pensassi.
nowox,

Bene, i caratteri personalizzati funzionano solo con 'listchars'. Per me, l'evidenziazione è più che sufficiente (soprattutto con colori aggressivi).
Ingo Karkat,
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.