Ubuntu 终端中的 vim:加载 vimrc 后设置"background"属性



我在 ubuntu 的默认终端中使用 vim。 我设置了两个终端配置文件:一个名为"dark",颜色>内置方案>"Solarized Dark">,另一个名为"light",带有Solarized Light。

在 Vim 中,我喜欢突出显示光标行,所以我将以下命令放在我的vimrc中:

hi CursorLine   cterm=NONE ctermbg=254 ctermfg=NONE

这将突出显示具有浅灰色背景的光标线。使用日光灯时是完美的,但在使用日光暗时则完全不然。

幸运的是,通过某种我不理解的机制,vim 知道我使用的是日光暗光还是日光:background选项相应地设置为"浅色"或"深色"。 例如,如果我使用日光灯,就会发生这种情况:

:set background?
background=light

所以我想我会在我的vimrc中使用它来根据我使用的配色方案更改光标线颜色:

set cursorline
if &background == "light"
hi CursorLine   cterm=NONE ctermbg=254 ctermfg=NONE
else
hi CursorLine   cterm=NONE ctermbg=238 ctermfg=NONE
endif

问题:它不起作用。光标线始终为浅灰色, 好像background属性始终设置为"light".

似乎在加载vimrc时,background属性尚未更改。

请注意,如果我在 Vim 中执行source ~/.vimrc它工作得很好,光标线会以正确的颜色突出显示。

关于如何解决这个问题的任何想法?

配置

vim 7.4.1689
GNOME 终端 3.18.3
Ubuntu 16.04 LTS 和 Ubuntu 17.04

编辑

请注意,我的vimrc中没有任何:colorscheme <something>:我通过 gnome 终端配置文件获得日光化主题。我不认为 Vim "知道"我在使用这些颜色;只是不知何故,一些脚本根据我的 Gnome 终端颜色选择设置 Vim 的background变量。

有一个名为AfterColors.vim的 vim 插件,它允许人们在加载配色方案后自定义内容。你基本上需要把你的高亮光标线语句(hi CursorLine...)放在after/colors/common.vim文件中。

来自 AfterColors.vim 脚本的文档:

允许您创建用于自定义任何 配色方案。

--示例 -- 如果你喜欢"沙漠"配色方案,但你真的希望注释是红色的,函数是蓝色的,以前你会 将整个配色方案复制到您的主目录中并对其进行自定义。 安装此插件后,您可以创建一个小脚本来更改 只是您想要的配色方案部分,完全按照您的方式 对于 ftplugin 或语法脚本:

对于 unix 系统,您可以创建:~/.vim/after/colors/desert.vim: 突出显示 注释 guifg=红色 ctermfg=红色 突出显示 函数 guifg=蓝色 ctermfg=蓝色

在窗口上,您将创建:C:\Documents 和 Settings\Peter\vimfiles\after\colors\desert.vim: 突出显示 注释 guifg=红色 ctermfg=红色 突出显示 函数 guifg=蓝色 ctermfg=蓝色

-- 版本6 警告 -- 如果您的 Vim 早于 7 版本,则 after/colors 脚本只会在 Vim 启动时加载一次。 这 如果您在 .vimrc 中选择配色方案,则不会有问题 文件,但如果在 vim 加载后更改配色方案,则 您的之后/颜色脚本将被忽略。 这不是问题 维姆 7.

安装详细信息

1) 将 AfterColors.vim 放入 ~/.vim/plugin/或 $HOME\vimfiles\plugin\

2) 在 after/colors/.vim 中创建您的配色方案自定义项

3)在 after/colors/common.vim 中创建全局自定义(适用于所有配色方案)

链接: AfterColors.vim 插件主页

您可以在修改background选项时运行命令。

在您的 vimrc 中:

autocmd OptionSet background call MyFunction()
function MyFunction()
if &background == "light"
hi CursorLine   cterm=NONE ctermbg=254 ctermfg=NONE
else
hi CursorLine   cterm=NONE ctermbg=238 ctermfg=NONE
endif
endfunction

未经测试,但它应该可以工作。


奖励点- 假设您要自定义语法文件,例如markdown.vim语法文件。您将在~/.vim/after/syntax/markdown.vim创建一个文件,并且可能会在此文件中有一些if &background == ...。您会遇到同样的问题(此文件在设置之前加载background),您可以通过在.vimrc中添加此行来解决此问题:

autocmd OptionSet background if exists("g:syntax_on") | syntax on | endif

有了这一行,当设置background时,Vim 将运行syntax on,这基本上是重新加载语法文件。

最新更新