3 回答
In this case matches come handy:
let s:kwreg='\v<%(PMID|OTHER|OTHER2)>'
let s:kwsyn='Todo'
augroup MyKeywords
autocmd!
autocmd WinEnter * if !exists('w:my_keyword_mnr') |
\ let w:my_keyword_mnr=matchadd(s:kwsyn, s:kwreg) |
\ endif
augroup END
let s:curtab=tabpagenr()
for s:tab in range(1, tabpagenr('$'))
execute 'tabnext' s:tab
let s:curwin=winnr()
for s:win in range(1, winnr('$'))
execute s:win.'wincmd w'
let w:my_keyword_mnr=matchadd(s:kwsyn, s:kwreg)
endfor
execute s:curwin.'wincmd w'
endfor
execute 'tabnext' s:curtab
unlet s:curtab s:curwin s:tab s:win
If you want that highlighted everywhere (as a kind of "overlay"), use matchadd()
, as shown by ZyX's answer.
If this is a syntax extension for one / a couple of filetypes (e.g. only Java and Python files), put your :syntax
definition into ~/.vim/after/syntax/<filetype>.vim
. You have to study the original syntax a bit, and possibly add containedin=<groupNames>
clauses, so that your items properly integrate.
You could use something like this:
syntax match pmidTODO /TODO\|PMID/
hi link pmidTODO Todo
hi Todo guibg=yellow guifg=black
This should work even when Todo
is redefined by Vim syntax files.
Edit: As ZyX pointed out, this does not survive syntax changes.