Vim 中加载缓冲区后自动命令“:highlight”的正确方法是什么?

What is the correct way in Vim to autocommand ":highlight" after a buffer is loaded?

由于各种原因,我 运行 Vim 十六色,与我终端的颜色同步。在最近的 Vim 更新中,我不得不完全修改我的“~/.vimrc”以使其恢复到 Linux 上的 运行ning 顺序。

最初我震惊地发现这条简单的线不起作用(即使在它前面有 "syntax on"):

:highlight Comment ctermfg=White

我也在使用 "LineNr" ctermfg。无论我 placed/stacked "Comment" ctermfg 在哪里,它都不起作用,或者干扰了所有其他正确的来源(即,与 "LineNr" 放在同一行)。但是,我发现在加载缓冲区后调用 "Comment" 会使注释按预期显示。

我是 Vim 的 autocmd 新手(无论如何都想知道它是如何工作的)。在我的“~/.vimrc”中是否有一个 "autocmd" 调用可以在缓冲区加载后立即 运行 上述代码行?

我已经尝试了几次迭代(BufWritePre、BufWritePost 等),但都没有成功。这是我之前的尝试:

autocmd BufWinPost * :highlight Comment ctermfg=white

如果我快速 :h autocmd-events,我发现事件 BufWinPost 不存在。我想,你想要 BufWinEnter 代替。您编写的 autocmd 应该可以工作,但 : 除外。 HTH

不要无缘无故诉诸:autocmd;更加努力地寻找根本原因!

您的描述不够具体;我猜你选择的颜色方案(或插件,但任何正常的插件都不应干扰默认突出显示)会覆盖你自定义的 Comment。你可以通过

检查谁定义了这个
:verbose highlight Comment

如果这指向你的配色方案,你只需要在之后执行你的:highlight命令。为此,您需要了解 :help initialization,并可能检查 :scriptnames 的输出。如果你的 ~/.vimrc 中有一个 :colorscheme foo 命令,它 应该 就像在它后面加上 :highlight 命令一样简单。

如果您即时切换配色方案,您确实需要 :autocmd,因为大多数配色方案会覆盖基本的 Comment 定义。正确的事件和模式是 ColorScheme *