ubuntu终端中的vim:加载vimrc后设置“background”属性

时间:2017-05-19 08:20:12

标签: ubuntu vim colors gnome-terminal

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

在Vim中,我喜欢突出显示光标,因此我将此命令放在vimrc中:

hi CursorLine   cterm=NONE ctermbg=254 ctermfg=NONE

这会突出显示浅灰色背景的光标线。使用Solarized Light时非常完美,但在使用Solarized Dark时则完全没有。

幸运的是,通过一些我不明白的机制,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

修改

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

2 个答案:

答案 0 :(得分:1)

有一个名为AfterColors.vim的vim插件允许用户在加载配色方案后自定义内容。您基本上需要将高亮度光标行语句(hi CursorLine...)放在after/colors/common.vim文件中。

来自AfterColors.vim脚本的文档:

  

允许您创建一个after / colors /脚本来自定义任何   色彩方案。

     

- 示例 - 如果你喜欢沙漠&#39; colorscheme,但你真的希望评论为红色,功能为蓝色,以前你会   将整个colorscheme复制到您的主目录并进行自定义。   安装此插件后,您可以创建一个要更改的小脚本   只是你想要的那些colorscheme的部分,你的确如何   对于ftplugin或语法脚本:

     

对于unix系统,你可以创建:〜/ .vim / after / colors / desert.vim:       突出显示评论guifg =红色ctermfg =红色       突出显示功能guifg =蓝色ctermfg =蓝色

     

在Windows上你会创建:C:\ Documents and   设置\彼得\ vimfiles \后\颜色\ desert.vim:       突出显示评论guifg =红色ctermfg =红色       突出显示功能guifg =蓝色ctermfg =蓝色

     

- VERSION 6警告 - 如果您的Vim早于版本7,那么只有在Vim启动时才会加载一次后/颜色脚本。这个   如果你在.vimrc中选择了colorscheme,那将不会有问题   文件,但如果你在加载vim后更改了colorscheme   您的后/颜色脚本将被忽略。这不是问题所在   Vim 7。

  

安装详情

     

1)将AfterColors.vim放在〜/ .vim / plugin /或$ HOME \ vimfiles \ plugin \

中      

2)在after / colors / .vim

之后创建colorscheme自定义      

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

链接:AfterColors.vim plugin home page

答案 1 :(得分:1)

修改了Rect().right选项后,您可以运行命令。

在您的vimrc中:

background

未经测试,但可以正常工作。


加分点-假设您要自定义语法文件,例如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 后,Vim将运行background,基本上会重新加载语法文件。