Evidenzia intervalli di testo in Vim
Domanda
È possibile contrassegnare un intervallo di testo in Vim e modificarne il colore di evidenziazione (in rosso) piuttosto che selezionare un altro intervallo di testo e cambiare quel colore (in verde) mantenendo l'evidenziazione precedente e così via?
Soluzione
Credo che il plug-in Txtfmt sia quello che stai cercando ...
Txtfmt fornisce una sorta di " rich text " capacità di testo semplice in Vim. L'evidenziazione viene eseguita tramite caratteri marcatori nascosti inseriti direttamente nel buffer, quindi l'evidenziazione viene resa persistente senza la necessità di memorizzare i metadati oltre al file.
Txtfmt è altamente configurabile. Le impostazioni predefinite supportano 8 colori di primo piano (configurabili), 8 colori di sfondo (configurabili) e tutte le combinazioni di attributi grassetto, sottolineato e corsivo (ad es. Grassetto, grassetto corsivo, grassetto sottolineato, ecc ...). Una configurazione non predefinita supporta i seguenti attributi aggiuntivi: standout, reverse e undercurl.
Esiste un file di aiuto molto ampio e l'autore è più che felice di rispondere alle domande sull'utilizzo ...
Altri suggerimenti
Le cose di base da cui partire sono:
:hi Green guibg=#33ff33
:syntax region Green start=/\%20l/ end=/\%30l/
Cosa fa:
- Definisci il gruppo di evidenziazione "Verde" con il colore di sfondo verde.
- Definisci la regione di sintassi che dovrebbe essere evidenziata con il gruppo di evidenziazione 'Verde' iniziato dalla riga 20 alla riga 30.
Ora puoi scrivere una funzione o / e un comando che accetta il testo selezionato visivamente e ad esso applica uno dei molteplici gruppi di colori predefiniti. Una volta che hai quella funzione, collegala alle tue chiavi: ad esempio \ g per verde, \ r per il rosso,
UPD:
Ed ecco un po 'di vimscript:
function! HighlightRegion(color)
hi Green guibg=#77ff77
hi Red guibg=#ff7777
let l_start = line("'<")
let l_end = line("'>") + 1
execute 'syntax region '.a:color.' start=/\%'.l_start.'l/ end=/\%'.l_end.'l/'
endfunction
vnoremap <leader>g :<C-U>call HighlightRegion('Green')<CR>
vnoremap <leader>r :<C-U>call HighlightRegion('Red')<CR>
Nota:
Non può riapplicare l'evidenziazione (da verde a rosso per esempio).
Esiste un plugin / script chiamato mark:
Mark: una piccola sceneggiatura per evidenziare contemporaneamente più parole in diversi colori. Ad esempio, quando si sfoglia un file di programma di grandi dimensioni, è possibile evidenziare alcune variabili chiave. Ciò renderà più facile tracciare il codice sorgente.
Sembra che Mark plugin fa quello che vuoi. Una volta installato, fai semplicemente una selezione visiva e premi \ m .
Non sono a conoscenza di alcun modo di fare qualcosa del genere poiché richiederebbe la memorizzazione di metadati non correlati al contenuto effettivo del file. Anche se è solo nella memoria mentre Vim è in esecuzione, non conosco un modo per farlo.
Non significa che non ci sia modo poiché la mia conoscenza di Vim è limitata. Ma sembra che qualcosa che Vim non farebbe.