在Vim中突出显示冲突的语法(使用关键字时)

时间:2012-09-29 20:50:50

标签: vim macvim vim-syntax-highlighting

我对Vim很陌生并遇到以下问题:

.gvimrc我定义的

syn keyword Todo PMID

突出显示我编辑的文件中的每个PMID。只要没有对文件应用通用语法突出显示(通过setfautocmd BufRead,BufNewFile …

,这种方法就可以正常运行

我的问题:如何维护一个突出显示的单个关键字列表,无论我编辑哪个文件以及我用于该文件的语法高亮?

3 个答案:

答案 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指出的那样,这在语法更改中无法生存。