我对Vim很陌生并遇到以下问题:
在.gvimrc
我定义的
syn keyword Todo PMID
突出显示我编辑的文件中的每个PMID
。只要没有对文件应用通用语法突出显示(通过setf
或autocmd BufRead,BufNewFile …
)
我的问题:如何维护一个突出显示的单个关键字列表,无论我编辑哪个文件以及我用于该文件的语法高亮?
答案 0 :(得分:4)
在这种情况下,匹配很方便:
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
答案 1 :(得分:2)
如果你想在任何地方突出显示(作为一种“叠加”),请使用matchadd()
,如ZyX的答案所示。
如果这是一个/几个文件类型的语法扩展(例如,只有Java和Python文件),请将:syntax
定义放入~/.vim/after/syntax/<filetype>.vim
。您必须稍微研究一下原始语法,并可能添加containedin=<groupNames>
子句,以便您的项目正确集成。
答案 2 :(得分:1)
您可以使用以下内容:
syntax match pmidTODO /TODO\|PMID/
hi link pmidTODO Todo
hi Todo guibg=yellow guifg=black
即使Vim语法文件重新定义 Todo
,这也应该有用。
编辑:正如ZyX指出的那样,这在语法更改中无法生存。