Переопределить цветовую схему - PullRequest
23 голосов
/ 14 марта 2010

Мне часто хочется изменить что-то немного в схеме цветов, но я не хочу редактировать исходный файл. Я попытался поместить свое изменение в '~ / .vim / after / colors / blah.vim', но это не работает для меня.


Например, я хочу изменить подсветку CursorLine в BusyBee.vim ..

~ / .vim / цветы / BusyBee.vim

Я создаю файл '~ / .vim / after / colors / BusyBee.vim' и добавляю это:

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

Однако я не вижу изменений. Конечно, это работает, если я изменю строку в оригинальном BusyBee.vim, но, как я уже сказал, я бы предпочел не делать этого.

Ведение ...

:colo Busy<TAB>

Показывает мне ...

BusyBee  BusyBee

Ответы [ 5 ]

41 голосов
/ 12 сентября 2011

Вы спросили, что я ищу сегодня. Я нашел более простое решение, чем представленные здесь. Я хочу прозрачный фон вместо черного фона из темы, хотя простое переопределение цвета после оператора colorscheme в .vimrc не работает, и установка плагина просто так странна. Вот что я сделал:

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

Почему это работает? Я предполагаю, что vim делает что-то кроме того, что просто читает ваш оператор colorscheme, загружает оператор и затем читает ваш оператор highlight и меняет цвет. В любом случае, кажется, что vim меняет цветовую схему только после чтения файлов конфигурации. Поэтому я предоставляю крючок, который будет менять цвета каждый раз, когда меняется цветовая схема. Приятным побочным эффектом является то, что это работает, даже если вы переключите свою цветовую схему (вы можете сделать блок if, если хотите).

7 голосов
/ 09 февраля 2011

Взгляните на AfterColors.vim , это позволит вам использовать метод ~/.vim/after/colors/BusyBee.vim.

4 голосов
/ 14 марта 2010

В моем .vimrc нет 'colorscheme BusyBee'. Мне нравится время от времени переключать цвета, поэтому я хочу «исправить» актуальную тему.

Я придумал это решение, не самое красивое, но как угодно.

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

И это помогает загрузить вашу любимую схему недели при запуске. (еек !! по умолчанию!)

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?

0 голосов
/ 05 февраля 2016

Фондовый synload.vim файл в $VIM/vimXX/syntax/synload.vim делает

runtime! syntax/syncolor.vim

Это дает указание vim читать заданную спецификацию файлов в каждом каталоге runtimepath. В системах RedHat путь выполнения будет выглядеть примерно так:

$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
0 голосов
/ 14 марта 2010

Put

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

после вашего

colorscheme BusyBee

запись в вашем _vimrc.

...