highlight LOL ctermbg=red
call matchadd("LOL", "this")
call matchadd("LOL", "little")
call matchadd("LOL", "light")
call matchadd("LOL", "of")
call matchadd("LOL", "mine")
Dada uma lista de palavras, quero destacar todas essas palavras no buffer atual. Eu estou escrevendo um plugin vim, então eu espero um pouco de barbear.
Isso é possível de maneira sã?
highlight LOL ctermbg=red
call matchadd("LOL", "this")
call matchadd("LOL", "little")
call matchadd("LOL", "light")
call matchadd("LOL", "of")
call matchadd("LOL", "mine")
Sim, é muito fácil destacar vários termos de pesquisa e de forma bastante simples, conforme descrito abaixo.
Como um exemplo rápido, aqui está uma ligação de chave de exemplo para F8
para destacar todas as ocorrências da palavra sob o cursor no buffer atual tiradas de Realce todas as correspondências de padrões de pesquisa - Vim Tips Wiki (basta inserir :set hls
para ativar o realce da pesquisa para ir direto ao assunto):
:nnoremap <F8> :let @/='\<<C-R>=expand("<cword>")<CR>\>'<CR>:set hls<CR>
Então, pressiono meu botão F8 no buffer atual enquanto estou sentado na palavra read
e é isso que recebo:
Expandindoapesquisadeváriaspalavras,tiradasde\|
, assim:
/read\|execute\|readattr
E isso é o que é exibido:
Para um plugin que permite que você
veja mark.vim .
A adição de realces personalizados (sem afetar o padrão de pesquisa atual) é fácil com as funções matchadd()
/ matchdelete()
. O problema está no requisito buffer atual , porque essas funções são window-local .
Para uma solução ad-hoc rápida e suja, essa diferença provavelmente não importa muito, mas para um plug-in você precisaria manipular (via :autocmd
s) quando outro buffer é exibido na janela atual ( limpando os destaques então), e possivelmente também outra janela exibindo o mesmo buffer que o atual.
Tags vim vim-plugins