我如何 保留文件类型的所有当前格式 添加功能
我想突出显示 .vim 文件中的颜色,以便突出显示每种颜色终端将如何解决它。
我创建了一个 vim.vim 文件,其中包含:

syn keyword yellow yellow containedin=All
highlight yellow ctermfg=yellow

syn keyword red red containedin=all
highlight red ctermfg=red

并将其放入 ~/.vim/after/syntax/vim.vim正如所建议的 here
这没有效果。

更新
事实上,当我说我的更改没有效果时,我错了。如果您在一行中单独键入 yellow,它将以黄色突出显示。不幸的是,这并不能解决我的问题。
我添加了 Al 描述的 F3 功能。
当我 f3 超过黄色(在上下文 ctermfg=yellow )它返回:
hi<vimHiCtermColor> trans<vimHiCtermColor> lo<vimHiCtermColor> FG:-1 BG:-1
然后 :syn list vimHiCtermColor 返回:
--- Syntax items ---
vimHiCtermColor xxx contained lightmagenta darkgray lightgrey darkgrey lightgreen lightgray darkmagenta gray white red grey darkred brown darkblue darkgreen lightblue yellow cyan
                   contained lightcyan lightred black blue green magenta darkcyan darkyellow
我检查了 :syn list darkgray (我没有定义的东西)看它是否存在:
--- Syntax items ---
E28: No such highlight group name: darkgray
Hit ENTER or type command to continue
我应该从这里去哪里?

最佳答案

解决方案

这是将黄色这个词着色的直接答案。

syn cluster vimHiCtermColors contains=vimHiCtermColorYellow
syn keyword vimHiCtermColorYellow yellow contained

syn match  vimHiCtermFgBg   contained   "\ccterm[fb]g="he=e-1   nextgroup=vimNumber,vimHiCtermColor,@vimHiCtermColors,vimFgBgAttrib,vimHiCtermError

highlight vimHiCtermColorYellow ctermfg=yellow

这是为所有颜色终端名称着色的解决方案。它们只在终端(不是 GUI)中着色,其他属性(256 色终端、GUI 颜色、粗体等属性)根本没有突出显示。为了进一步扩展,您可能需要某种脚本来迭代所有可能的值。
syn cluster vimHiCtermColors contains=vimHiCtermColorBlack,vimHiCtermColorBlue,vimHiCtermColorBrown,vimHiCtermColorCyan,vimHiCtermColorDarkBlue,vimHiCtermColorDarkcyan,vimHiCtermColorDarkgray,vimHiCtermColorDarkgreen,vimHiCtermColorDarkgrey,vimHiCtermColorDarkmagenta,vimHiCtermColorDarkred,vimHiCtermColorDarkyellow,vimHiCtermColorGray,vimHiCtermColorGreen,vimHiCtermColorGrey,vimHiCtermColorLightblue,vimHiCtermColorLightcyan,vimHiCtermColorLightgray,vimHiCtermColorLightgreen,vimHiCtermColorLightgrey,vimHiCtermColorLightmagenta,vimHiCtermColorLightred,vimHiCtermColorMagenta,vimHiCtermColorRed,vimHiCtermColorWhite,vimHiCtermColorYellow

syn keyword vimHiCtermColorBlack black contained
syn keyword vimHiCtermColorBlue blue contained
syn keyword vimHiCtermColorBrown brown contained
syn keyword vimHiCtermColorCyan cyan contained
syn keyword vimHiCtermColorDarkBlue darkBlue contained
syn keyword vimHiCtermColorDarkcyan darkcyan contained
syn keyword vimHiCtermColorDarkgray darkgray contained
syn keyword vimHiCtermColorDarkgreen darkgreen contained
syn keyword vimHiCtermColorDarkgrey darkgrey contained
syn keyword vimHiCtermColorDarkmagenta darkmagenta contained
syn keyword vimHiCtermColorDarkred darkred contained
syn keyword vimHiCtermColorDarkyellow darkyellow contained
syn keyword vimHiCtermColorGray gray contained
syn keyword vimHiCtermColorGreen green contained
syn keyword vimHiCtermColorGrey grey contained
syn keyword vimHiCtermColorLightblue lightblue contained
syn keyword vimHiCtermColorLightcyan lightcyan contained
syn keyword vimHiCtermColorLightgray lightgray contained
syn keyword vimHiCtermColorLightgreen lightgreen contained
syn keyword vimHiCtermColorLightgrey lightgrey contained
syn keyword vimHiCtermColorLightmagenta lightmagenta contained
syn keyword vimHiCtermColorLightred lightred contained
syn keyword vimHiCtermColorMagenta magenta contained
syn keyword vimHiCtermColorRed red contained
syn keyword vimHiCtermColorWhite white contained
syn keyword vimHiCtermColorYellow yellow contained

syn match  vimHiCtermFgBg   contained   "\ccterm[fb]g="he=e-1   nextgroup=vimNumber,@vimHiCtermColors,vimFgBgAttrib,vimHiCtermError

highlight vimHiCtermColorBlack ctermfg=black
highlight vimHiCtermColorBlue ctermfg=blue
highlight vimHiCtermColorBrown ctermfg=brown
highlight vimHiCtermColorCyan ctermfg=cyan
highlight vimHiCtermColorDarkBlue ctermfg=darkBlue
highlight vimHiCtermColorDarkcyan ctermfg=darkcyan
highlight vimHiCtermColorDarkgray ctermfg=darkgray
highlight vimHiCtermColorDarkgreen ctermfg=darkgreen
highlight vimHiCtermColorDarkgrey ctermfg=darkgrey
highlight vimHiCtermColorDarkmagenta ctermfg=darkmagenta
highlight vimHiCtermColorDarkred ctermfg=darkred
highlight vimHiCtermColorDarkyellow ctermfg=darkyellow
highlight vimHiCtermColorGray ctermfg=gray
highlight vimHiCtermColorGreen ctermfg=green
highlight vimHiCtermColorGrey ctermfg=grey
highlight vimHiCtermColorLightblue ctermfg=lightblue
highlight vimHiCtermColorLightcyan ctermfg=lightcyan
highlight vimHiCtermColorLightgray ctermfg=lightgray
highlight vimHiCtermColorLightgreen ctermfg=lightgreen
highlight vimHiCtermColorLightgrey ctermfg=lightgrey
highlight vimHiCtermColorLightmagenta ctermfg=lightmagenta
highlight vimHiCtermColorLightred ctermfg=lightred
highlight vimHiCtermColorMagenta ctermfg=magenta
highlight vimHiCtermColorRed ctermfg=red
highlight vimHiCtermColorWhite ctermfg=white
highlight vimHiCtermColorYellow ctermfg=yellow

解释

如果你查看 colors/vim.vim 并搜索 cterm ,你会看到一行
syn match  vimHiCtermFgBg   contained   "\ccterm[fb]g="he=e-1   nextgroup=vimNumber,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError

这表示,当遇到 ctermfg=ctermbg= 时,将下一个单词突出显示为 vimNumbervimHiCtermColorvimFgBgAttribvimHiCtermError 。查看vimHiCtermColor(上面几行),我们看到
syn keyword vimHiCtermColor contained   black blue brown cyan darkBlue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow

这列出了所有的颜色终端名称,它们被突出显示为具有相同语法组的关键字。因此,我们可以单独突出显示它们,而不是一起突出显示它们。上面第一个解决方案的四行描述了步骤:
  • 创建一个新集群,@vimHiCtermColors 包含步骤 2 中的每个组。
  • 为每个颜色值添加一个新关键字。
  • 修改 vimHiCtermFgBg 定义以使用 @vimHiCtermColors 而不是 vimHiCtermColor
  • 根据需要突出显示每个关键字。

  • 您尝试的方法无效的原因是双重的。首先,在 nextgroup 中指定的语法组优于一般组(特别是您的 yellow 组)。但是,您可能会说,“containedin=ALL 怎么样?”这是第二点。关键字是单独的单位,不能包含任何其他内容。原始的 vimHiCtermColor 组都是关键字,因此您的 containedin=ALL 无法覆盖它。如果 vimHiCtermColor 是匹配项而不是关键字,则它可能有效。

    关于vim - 在 Vim 中自定义语法高亮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2464593/

    10-09 02:55