【问题标题】:Set colors for custom syntax keywords in Vim?在 Vim 中为自定义语法关键字设置颜色?
【发布时间】:2015-07-13 04:28:51
【问题描述】:

我在 vim 中使用了一个语法文件,它定义了许多特定于文件类型的语法关键字。要为这种类型的文件着色,我还为共享目录创建了一个颜色方案文件,该文件试图突出显示这些语法关键字,但是当我打开该扩展名的文件时它们不会生效。

然而,我的颜色文件会突出显示普通组,例如 NormalSpecialComment 等。同样,当我尝试将这些突出显示命令移动到我的 .vimrc 文件时,它们仍然没有效果。但是,在 vim 中加载文件后,手动输入高亮命令会按预期工作。

为了使用语法文件中定义的语法关键字,我需要做些什么特别的事情吗?我是否可能需要在 .vimrc 中指定语法文件和颜色文件的加载顺序?

编辑:使用:scriptnames,我可以看到我的自定义颜色方案文件在语法文件之前很长时间加载,实际上最后加载。但是,我的 .vimrc 文件将 colorscheme CustomPersonal 指定为最后一行,在 syntax on 之后很远。

【问题讨论】:

  • 哦,太好了,成功了。正如您所建议的,我最终创建了~/.vim/after/syntax/<filetype>.vim 文件,但其中只有一行colorscheme CustomPersonal 如果您将此作为答案提交,我会为您标记!

标签: vim syntax-highlighting vim-syntax-highlighting


【解决方案1】:

Vim 有一个用于覆盖语法组的内置机制,所以如果你做对了所有事情(即使在你的 ~/.vimrc 中),这应该可以工作。 @MatthewStrawbridge 建议的解决方案可能有效,但感觉不对,因为颜色方案在 Vim 中是全局,因此不应在 ftplugin 中指定。

以下是覆盖的工作原理:

Vim 中的大多数文件类型(如python)都带有定义高亮组的语法(通过:highlight 查看它们)。这些特定组(例如pythonFunction)然后链接到一组默认组(:help highlight-groups,例如Identifier)。 colorscheme 然后为默认组提供前景色/背景色和/或粗体和斜体(分别用于终端、颜色终端和/或 GVIM)格式的组合。

高亮组→默认组→颜色+样式
pythonFunctionIdentifierterm=underline ctermfg=3 guifg=DarkCyan

因此,对于一组符合您个人品味的精美配色,您可以选择配色方案。为了调整一些特定的关联,您可以将突出显示组的链接更改为默认组,例如:

:hi link pythonFunction Special

这已经可以在~/.vimrc 中完成。只要语法脚本正确使用:hi def link,您建立的原始链接将被保留; def[ault] 参数确保只有在不存在链接时才会创建链接。

【讨论】:

    【解决方案2】:

    你的.vimrc 将在你第一次启动 Vim 时运行;在文件加载之前不会应用语法文件,听起来它会覆盖您的设置。

    相反,您可以将自定义配色方案放入 ~/.vim/after/syntax/<filetype>.vim 而不是 CustomPersonal.vim(或至少从那里调用)。

    另一种选择是将autocmd 添加到您的.vimrc 到源CustomPersonal.vim 以响应合适的事件。

    【讨论】:

    • 标记为答案。谢谢!出于好奇,autocmd 和事件是什么?
    • :h :au。如果它们在其他地方被覆盖并且您不确定在哪里(例如,您可以添加一个 autocmd 以在每次进入窗口时更改某些设置),这对于重新应用设置很有用。但这更笨重!
    猜你喜欢
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多