覆盖colorscheme

时间:2010-03-13 21:43:18

标签: vim colors color-scheme

我经常发现自己想要在colorscheme中改变一些东西,但我不想编辑原始文件。我尝试将我的更改放在'〜/ .vim / after / colors / blah.vim'中,但这对我不起作用。


示例,我想更改BusyBee.vim中的CursorLine高亮显示..

〜/的.vim /颜色/ BusyBee.vim

我创建文件'〜/ .vim / after / colors / BusyBee.vim'并添加:

hi CursorLine    guibg=#000000 ctermbg=Black cterm=none

然而,我没有看到变化。当然,如果我更改原始BusyBee.vim中的行,它会起作用,但就像我说我不想那样做。

...做

:colo Busy<TAB>

告诉我......

BusyBee  BusyBee

6 个答案:

答案 0 :(得分:40)

你问我今天要找什么。我找到了比这里介绍的更简单的解决方案。我想要透明背景而不是主题中的黑色背景,而在colorscheme中的.vimrc语句之后简单地覆盖颜色不起作用并且为此安装插件很奇怪。这是我做的:

autocmd ColorScheme * highlight Normal ctermbg=None
autocmd ColorScheme * highlight NonText ctermbg=None

为什么会这样?我想vim除了阅读你的colorscheme语句并加载语句然后阅读你的highlight语句并更改颜色之外还会做一些事情。无论如何,似乎vim只在读取配置文件后才改变配色方案。所以我提供了一个钩子,每次改变颜色方案时都会改变颜色。一个很好的副作用是,即使你切换你的配色方案也可以这样做(如果你愿意,你可以做一个if块。)

答案 1 :(得分:7)

查看AfterColors.vim,您可以使用~/.vim/after/colors/BusyBee.vim方法。

答案 2 :(得分:4)

我的.vimrc中没有'colorscheme BusyBee'。我喜欢偶尔切换colorscheme,所以我想“修复”实际的主题。

我提出了这个解决方案,不是最漂亮的,而是其他的。

function! FixColorscheme() " {{{
    echo "fixing colorscheme"
    if has("gui_running")
        if (g:colors_name =~ "busybee")
            hi Folded        guibg=#001336 guifg=#003DAD gui=none
            hi CursorLine    guibg=#000000 ctermbg=Black cterm=none

        elseif (g:colors_name =~ "256-jungle")
            hi CursorLine    guibg=#000000 ctermbg=Black cterm=none

        elseif (g:colors_name =~ "xoria256")
            hi Folded        guibg=#001336 guifg=#003DAD gui=none cterm=none
            "hi Folded         ctermbg=234  ctermfg=25    cterm=none
        endif
    elseif &t_Co == 256
        if (g:colors_name =~ "busybee")
            hi Folded        guibg=#001336 guifg=#003DAD gui=none
            hi CursorLine    guibg=#000000 ctermbg=Black cterm=none

        elseif (g:colors_name =~ "256-jungle")
            hi CursorLine    guibg=#000000 ctermbg=Black cterm=none

        elseif (g:colors_name =~ "xoria256")
            hi Folded         ctermbg=234  ctermfg=25    cterm=none
            hi CursorLine    cterm=none
        "else
            "hi CursorLine     ctermbg=0                  cterm=none
        endif
    endif
    endfunction
" }}}

更改配色方案时自动运行。

augroup mycolorschemes
    au!
    au ColorScheme * call FixColorscheme()
augroup END

这有助于在启动时加载您最喜欢的周计划。 (eek !!默认!)

if iSFirstRun == 1
    echo "HI"
    colo xoria256
    call FixColors()
endif

..这位于.vimrc的最顶端

"" To let us set some settings only once. {{{
    if exists("isRunning")
        let isFirstRun = 0
    else
        let isFirstRun = 1
    endif
    let isRunning = 1
" }}}

也许已经有了'isFirstRun'的东西?

答案 3 :(得分:1)

为后代引用 Vim 8.2 的帮助,因为这是我第一次搜索此场景:

To customize a color scheme use another name, e.g. ~/.vim/colors/mine.vim",
and use :runtime to load original color scheme:
    colors/evening.vim
    Statement ctermfg=Blue guifg=Blue

答案 4 :(得分:0)

synload.vim中的库存$VIM/vimXX/syntax/synload.vim文件

runtime! syntax/syncolor.vim

这指示vim读取runtimepath的每个目录中的给定filespec。在RedHat系统上,runtimepath将类似于:

$HOIME/.vim,/usr/share/vim/vimfiles,/usr/share/vim/vim72,/usr/share/vim/vimfiles/after,$HOME/.vim/after

将您的颜色调整放在$HOME/.vim/after/syntax/syncolor.vim/usr/share/vim/vimfiles/after/syntax中,您应该好好去。

虽然您的调整可以是简单的hi ...指令,但它显然更复杂。所以我大量借用了库存syncolor.vim文件,现在有了:

if !exists("syntax_cmd") || syntax_cmd == "on"
  " ":syntax on" works like in Vim 5.7: set colors but keep links
  command -nargs=* SynColor hi <args>
  command -nargs=* SynLink hi link <args>
else
  if syntax_cmd == "enable"
    " ":syntax enable" keeps any existing colors
    command -nargs=* SynColor hi def <args>
    command -nargs=* SynLink hi def link <args>
  elseif syntax_cmd == "reset"
    " ":syntax reset" resets all colors to the default
    command -nargs=* SynColor hi <args>
    command -nargs=* SynLink hi! link <args>
  else
    " User defined syncolor file has already set the colors.
    finish
  endif
endif

" Change comment color from bright cyan to gray
" The bold cyan conflicts with variables and other colors
if &background == "dark"
  SynColor Comment      term=bold cterm=NONE ctermfg=Gray ctermbg=NONE gui=NONE guifg=#80a0ff guibg=NONE
endif

delcommand SynColor
delcommand SynLink

答案 5 :(得分:-3)

hi CursorLine    guibg=#000000 ctermbg=Black cterm=none

之后

colorscheme BusyBee

在_vimrc中输入。