Dato un elenco di parole, voglio evidenziare tutte quelle parole nel buffer corrente. Sto scrivendo un plug-in Vim quindi mi aspetto un po 'di rasatura yak.
Questo è possibile in modo sano?
Dato un elenco di parole, voglio evidenziare tutte quelle parole nel buffer corrente. Sto scrivendo un plug-in Vim quindi mi aspetto un po 'di rasatura yak.
Questo è possibile in modo sano?
Risposte:
highlight LOL ctermbg=red
call matchadd("LOL", "this")
call matchadd("LOL", "little")
call matchadd("LOL", "light")
call matchadd("LOL", "of")
call matchadd("LOL", "mine")
Sì, è molto facile evidenziare più termini di ricerca, e abbastanza saggiamente come descritto di seguito.
Come esempio rapido, ecco un esempio di associazione a chiave F8
a evidenzia tutte le occorrenze della parola sotto il cursore nel buffer corrente preso da Evidenzia tutte le corrispondenze dei pattern di ricerca: Vim Tips Wiki (basta inserire :set hls
per attivare l'evidenziazione della ricerca per tagliare all'inseguimento):
:nnoremap <F8> :let @/='\<<C-R>=expand("<cword>")<CR>\>'<CR>:set hls<CR>
Quindi, premo il mio pulsante F8 nel buffer corrente mentre sono seduto sulla parola read
e questo è quello che ottengo:
Espansione della ricerca di più parole, tratto da Cerca modelli - Vim Tips Wiki , Trovando questo o quello , cerca le parole separate da un carattere di pipe sfuggito, \|
, come questo:
/read\|execute\|readattr
E questo è ciò che viene visualizzato:
L'aggiunta di evidenziazioni personalizzate (senza influenzare il modello di ricerca corrente) è facile con matchadd()
/ matchdelete()
funzioni. Il problema è nel buffer corrente requisito, perché queste funzioni sono window-locali .
Per una soluzione ad-hoc rapida e sporca, questa differenza probabilmente non ha molta importanza, ma per un plugin, dovrai gestire (tramite :autocmd
s) quando viene visualizzato un altro buffer nella finestra corrente (cancellando le evidenziazioni allora), e possibilmente anche un'altra finestra che visualizza lo stesso buffer di quello corrente.
:help :match
e inoltre?