在 vim 中突出显示 endif

在 vim 中突出显示 endif

我正在为 vim 创建配色方案并希望赋予ifendif不同的颜色。

我按照教程进行操作 vimcasts并有以下文件

"set 256 colors for gnome-terminal
if $COLORTERM == 'gnome-terminal'
    set t_Co=256
endif
set background=dark
highlight clear
if exists("syntax_on")
    syntax reset
endif
let g:colors_name = "my_color_scheme"

highlight guibg=#110117 ctermbg=233
highlight vimcommand guifg=#6792db ctermfg=68 guibg=NONE
highlight link number vimstring
highlight vimnotfunc guifg=#e6b13e ctermfg=179 guibg=NONE

最后几行改变了的颜色if但没有改变endif

我使用代码片段来查找语法的名称

" Show syntax highlighting groups for word under cursor
nmap <C-S-P> :call <SID>SynStack()<CR>
function! <SID>SynStack()
  if !exists("*synstack")
     return
  endif
  echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc 

它显示['vimIsCommand', 'vimCommand']。为其中任何一个设置 fg 颜色似乎不会改变突出显示。

我如何才能找到正确的组名?

答案1

首先,色彩方案仅提供(大多数是通用的)高亮组到特定颜色和文本属性的映射。语法脚本提供解析规则来识别语法元素。然后这些语法组(例如vimCommand)被链接到通用高亮组(例如Statement)。

虽然自定义配色方案确实可以为 提供特殊颜色,但vimCommand这种情况并不常见。您可以在自己的配色方案中执行此操作,但也可以:hi link ...在您的 中执行覆盖~/.vimrc

无论如何,你只能为分离语法组。

SyntaxAttr.vim - 显示光标下字符的语法高亮属性插件类似于您问题中的代码片段。有了它,通过查看 中的语法定义$VIMRUNTIME/syntax/vim.vim,我发现if属于vimNotFunc组(与elseifreturn和 一起while),而endif与所有 Vimscript 命令一起放入vimCommand。因此,任何颜色更改也会影响许多其他命令,这可能不是您想要的。

要解决这个问题,您需要调整语法规则本身,通过定义覆盖:syntax命令并将它们放入~/.vim/after/syntax/vim.vim。这是可能的,但很乏味(特别是考虑到您可能也希望对其他语言使用相同的方法)。我宁愿重新考虑您是否不喜欢预定义的分组。

相关内容