Подтвердить что ты не робот

Переопределить цветовую схему

Я часто нахожу, что хочу изменить что-то мало в цветовой схеме, но я не хочу редактировать исходный файл. Я попытался внести изменения в '~/.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
4b9b3361

Ответ 1

Посмотрите AfterColors.vim, это позволит вам использовать метод ~/.vim/after/colors/BusyBee.vim.

Ответ 2

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

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

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

Ответ 3

У меня нет "colorscheme BusyBee" в моем .vimrc. Мне нравится время от времени переключать цветовую схему, поэтому я хочу "исправить" фактическую тему.

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

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'?

Ответ 4

Файл запаса 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

Ответ 5

Положите

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

после

colorscheme BusyBee

в вашем _vimrc.