我只想突出显示关键字并将其他所有内容都保留为黑色。
这样的事情显然会以我想要的方式突出显示关键字,但不会禁用其他所有内容:
hi keyword ctermfg=DarkBlue
到目前为止,我只是通过手动列出所有密钥来实现这一目标:
sy off
sy reset
sy keyword myKeyword if for while
hi link myKeyword Keyword
hi keyword ctermfg=DarkBlue
但我想重新使用所有预定义的键。这可能吗?
答案 0 :(得分:1)
据我所知,没有办法轻易做到;也许我错过了一些东西,但似乎vim缺乏获得关于高亮配置的完整信息(带功能)的可能性。
为了得到你想要的东西,一个想法是解析:syn list
命令的输出,以获得用于特定高亮组的关键字列表; 但是以完美的方式解析它是不可能的,因为输出中的特殊含义只能通过颜色而不是可解析的模式来区分。
一些可能的解决方法:
要设置一个列表,其中包含您不想要的每个突出显示组的名称,然后根据需要丢弃它们,可能取决于当前的文件类型;例如:
let s:discard_hi_filetypes = {
\ 'vim' : [ 'Comment', 'Identifier', 'Constant', 'PreProc', 'Special', 'Type', 'vimOper' ],
\ 'cpp' : [ 'cComment', 'cInclude', 'cIncluded', 'cppSTLtype', 'cCppString', 'cTodo', 'cDefine', 'cNumber', 'cType' ],
\ }
function! KWHighlight()
" Applies to all buffers; run ':syn on' to reset
if !has_key(s:discard_hi_filetypes, &ft) | return | endif
for g in s:discard_hi_filetypes[&ft]
exe "hi clear " . g
exe "hi link " . g . " NONE"
endfor
endf
以下内容可以帮助您快速找到突出显示组的名称:
command! ShowHL augroup ShowHL | exe "au! ShowHL" | au CursorMoved * echo synIDattr(synID(line('.'), col('.'), 1), 'name') | augroup END
command! HideHL au! ShowHL
以下代码可让您快速(但)手动丢弃高亮组,即光标下的当前组:
command! HLDisable exe "hi clear " . synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name')
noremap __ :HLDisable<cr>
键入__
几次,在不同的不需要的突出显示的单词上,让你得到所需的结果,但它根本不是自动的。