我在 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
,这基本上是重新加载语法文件。