在 Vim 中为自定义语法关键字设置颜色?
Set colors for custom syntax keywords in Vim?
我在 vim 中使用了一个语法文件,它定义了许多特定于文件类型的语法关键字。为了给这种类型的文件上色,我还为共享目录创建了一个 colorscheme 文件,它试图突出显示这些语法关键字,但是当我打开该扩展名的文件时它们不会生效。
不过,我的颜色文件会突出显示普通组,例如 Normal
、Special
、Comment
等。同样,当我尝试将这些突出显示命令移动到我的 .vimrc 文件,他们仍然没有效果。但是,在 vim 中加载文件后,手动输入高亮命令可以正常工作。
为了使用语法文件中定义的语法关键字,我需要做些什么特别的事情吗?我是否可能需要在 .vimrc 中指定语法文件和颜色文件的加载顺序?
编辑:使用:scriptnames
,我可以看到我的自定义配色方案文件在语法文件加载之前很久就加载了,实际上它最后加载了。但是,我的 .vimrc 文件将 colorscheme CustomPersonal
指定为最后一行,远远在 syntax on
.
之后
你的 .vimrc
将是 运行 当你第一次开始 Vim;在文件加载之前不会应用语法文件,听起来它正在覆盖您的设置。
相反,您可以将自定义配色方案放在 ~/.vim/after/syntax/<filetype>.vim
而不是 CustomPersonal.vim
中(或者至少从那里调用它)。
另一种选择是将 autocmd
添加到您的 .vimrc
来源 CustomPersonal.vim
以响应合适的事件。
Vim 有一个内置的机制来覆盖语法组,所以如果你做的一切都正确(即使在你的 ~/.vimrc
中),这应该可以工作。 @MatthewStrawbridge 建议的解决方案可能有效,但感觉不对,因为配色方案在 Vim 中是 global,因此不应在 ftplugin
中指定。
覆盖的工作原理如下:
Vim 中的大多数 文件类型 (如 python
)都带有定义高亮组的语法(通过 :highlight
查看它们)。这些特定组(例如 pythonFunction
)然后 linked 到一组默认组(:help highlight-groups
,例如 Identifier
)。 colorscheme 然后为默认组提供前景色/背景色组合 and/or 格式,如粗体和斜体(分别用于终端、彩色终端、and/or GVIM)。
高亮组→默认组→颜色+样式
pythonFunction
→Identifier
→term=underline ctermfg=3 guifg=DarkCyan
因此,要获得满足您个人品味的一组精美匹配的颜色,您可以选择一种配色方案。为了调整一些特定的关联,您可以将突出显示组的 linking 更改为默认组,例如:
:hi link pythonFunction Special
这已经可以在 ~/.vimrc
中完成。只要语法脚本正确使用:hi def link
,你建立的原始link就会被保留; def[ault]
参数确保只有在 link 不存在时才会创建 link。
我在 vim 中使用了一个语法文件,它定义了许多特定于文件类型的语法关键字。为了给这种类型的文件上色,我还为共享目录创建了一个 colorscheme 文件,它试图突出显示这些语法关键字,但是当我打开该扩展名的文件时它们不会生效。
不过,我的颜色文件会突出显示普通组,例如 Normal
、Special
、Comment
等。同样,当我尝试将这些突出显示命令移动到我的 .vimrc 文件,他们仍然没有效果。但是,在 vim 中加载文件后,手动输入高亮命令可以正常工作。
为了使用语法文件中定义的语法关键字,我需要做些什么特别的事情吗?我是否可能需要在 .vimrc 中指定语法文件和颜色文件的加载顺序?
编辑:使用:scriptnames
,我可以看到我的自定义配色方案文件在语法文件加载之前很久就加载了,实际上它最后加载了。但是,我的 .vimrc 文件将 colorscheme CustomPersonal
指定为最后一行,远远在 syntax on
.
你的 .vimrc
将是 运行 当你第一次开始 Vim;在文件加载之前不会应用语法文件,听起来它正在覆盖您的设置。
相反,您可以将自定义配色方案放在 ~/.vim/after/syntax/<filetype>.vim
而不是 CustomPersonal.vim
中(或者至少从那里调用它)。
另一种选择是将 autocmd
添加到您的 .vimrc
来源 CustomPersonal.vim
以响应合适的事件。
Vim 有一个内置的机制来覆盖语法组,所以如果你做的一切都正确(即使在你的 ~/.vimrc
中),这应该可以工作。 @MatthewStrawbridge 建议的解决方案可能有效,但感觉不对,因为配色方案在 Vim 中是 global,因此不应在 ftplugin
中指定。
覆盖的工作原理如下:
Vim 中的大多数 文件类型 (如 python
)都带有定义高亮组的语法(通过 :highlight
查看它们)。这些特定组(例如 pythonFunction
)然后 linked 到一组默认组(:help highlight-groups
,例如 Identifier
)。 colorscheme 然后为默认组提供前景色/背景色组合 and/or 格式,如粗体和斜体(分别用于终端、彩色终端、and/or GVIM)。
高亮组→默认组→颜色+样式
pythonFunction
→Identifier
→term=underline ctermfg=3 guifg=DarkCyan
因此,要获得满足您个人品味的一组精美匹配的颜色,您可以选择一种配色方案。为了调整一些特定的关联,您可以将突出显示组的 linking 更改为默认组,例如:
:hi link pythonFunction Special
这已经可以在 ~/.vimrc
中完成。只要语法脚本正确使用:hi def link
,你建立的原始link就会被保留; def[ault]
参数确保只有在 link 不存在时才会创建 link。