如何定义我自己的高亮颜色以在 vim 中与 matchadd() 一起使用?

Dav*_*ite 5 vim macvim

我最近为我找到了一小段代码.vimrc

if has("autocmd")
  " Highlight TODO, FIXME, NOTE, etc.
  if v:version > 701
    autocmd Syntax * call matchadd('Todo',  '\W\zs\(TODO\|FIXME\|CHANGED\|XXX\|BUG\|HACK\)')
    autocmd Syntax * call matchadd('Debug', '\W\zs\(NOTE\|INFO\|IDEA\)')
  endif
endif
Run Code Online (Sandbox Code Playgroud)

基本上,它允许我定义与不同突出显示匹配的关键字(Todo 和 Debug 是颜色的名称)。

有没有一种方法可以定义我自己的配色方案并给它们命名?具体来说,我想要的是 3 个标签:TODO1、TODO2 和 TODO3。这个想法是 TODO3 的优先级低于 TODO1,因此以较浅的阴影突出显示。

如果我无法定义自己的颜色,在哪里可以找到我可以使用的颜色名称列表?

Plo*_*uff 3

如果您不想使用默认主题颜色,解决方案如下:

" Define autocmd for some highlighting *before* the colorscheme is loaded
augroup VimrcColors
au!
  autocmd ColorScheme * highlight ExtraWhitespace ctermbg=darkgreen guibg=#444444
  autocmd ColorScheme * highlight Tab             ctermbg=darkblue  guibg=darkblue
augroup END
Run Code Online (Sandbox Code Playgroud)

稍后(这必须是之后):

" Load color scheme
colorscheme yourscheme
Run Code Online (Sandbox Code Playgroud)

颜色定义遵循以下格式:

autocmd ColorScheme * highlight <ColorName> ctermbg=<TerminalBackgroundColour> guibg=<GuiBackgroundColour> ctermfg=<TerminalFontColor> guifg=<GuiFontColour>
Run Code Online (Sandbox Code Playgroud)

其中cterm颜色必须来自预定义的列表(请参阅 参考资料:help cterm-colors获取更多信息)。Gui 颜色可以是任何十六进制颜色。

  • 你的 `if !exists('var') | 让 var=1 | ... | endif` 自然地由 `augroup vimrcColors | 表达 自动命令!| ... | augroup END`。它的优点是您不必被迫手动取消变量并删除自动命令以重新加载它们。 (2认同)