2010-09-15 12 views
9

Ho documenti Vim con regioni di codice che utilizzano le regioni 'include sintassi' per avere un'evidenziazione della sintassi diversa dal documento principale. Ad esempio, ho una regione di sintassi chiamata "pyregion" definita che utilizzo quando inserisco il codice Python. Le aree di pyregion del documento vengono quindi evidenziate mediante l'installazione nel file di sintassi di Python, mentre l'area esterna alla regione utilizza il file di sintassi del documento principale.Evidenziazione a colori di sfondo a larghezza intera del codice in Vim

Voglio che l'intero sfondo nella regione Python sia ombreggiato di un colore diverso per distinguerlo dalle aree non Python del documento. Posso ottenere una parte della strada c'è inserendo un fondo per l'intera regione pitone:

:highlight pyregion guibg=#555555 

Ma il comando cambia lo sfondo sopra soltanto per le superfici che hanno caratteri di testo su di loro, non per intero sfondo del regione, che sembra essere ancora governata come il resto del documento dal colore di sfondo definito per il gruppo 'Normale'. Va bene, attira l'attenzione sulla regione, ma ha un aspetto macchiato perché solo i caratteri del codice hanno uno sfondo diverso, non l'intera banda della regione sullo schermo.

C'è un modo per ottenere una banda uniforme di un colore di sfondo diverso su tutta la regione, non solo una parte della regione dove ci sono dei caratteri?

C'è domanda relativa e risposta nel seguente link, ma finora posso dire che la risposta cambia anche sfondo solo se v'è il testo: Highlight Code Block Backgrounds with Vim

Grazie per qualsiasi aiuto.

risposta

7

Non credo che ciò sia possibile senza un ridicolo assurdo (vedi sotto). Se si tenta questo:

:match Error /\%3l/ 

Si mette in evidenza ciò che Vim considera l'intera linea di 3. L'evidenziazione unico si estende fino alla fine dei caratteri. Questo mi fa sospettare che non ci sarà modo di evidenziare personaggi inesistenti.


Interrompere la lettura ora.

Puramente come esercizio nel ridicolo, è possibile aggiungere un numero enorme di spazi alla fine di ogni riga e quindi rimuoverli quando si salva. Questo sarebbe sciocco, ma è l'unica cosa che riesco a pensare.

" Add spaces to the end of every line (you could also do 
" this selectively for lines that don't already have lots 
" of spaces and you could do it on reading a file or whatever) 
:exe '%s/$/' . repeat(' ', 1000) . '/' 
" Automatically remove spaces at the end of every line when saving 
:autocmd BufWritePre %s/ *$// 
" Make 'A' append at the end of the non-space characters on the line 
:nmap A/*$<CR>i 
" Make '$' go to the end of the non-space characters on the line 
:nmap $ /.\? *$<CR> 

Disclaimer: non farlo.

+0

Al - Grazie, stavo capendo da solo che questa è solo una limitazione di Vim che è più intelligente da accettare che combattere contro. Ho ottenuto una risposta simile dalla query che ho postato su vim usergroups. È più facile accettarlo quando so che non esiste un modo corretto per ottenere esattamente quello che voglio. –

3

Sì, è possibile farlo utilizzando il comando di segno.

http://vimdoc.sourceforge.net/htmldoc/sign.html

sign define 1 linehl=Error 
sign place 1 name=er1 line=1 file=file.txt 

evidenzierà la prima linea di file.txt fino al bordo del terminale.

Problemi correlati