Измените цветовую схему при вызове vimdiff в Vim

Я использую плагин VCSCommand.

Я называю утилиту VimDiff в Vim путем вызова :VCSVimDiff.

Я имею в моем vimrc:

if &diff
    set t_Co=256
    set background=dark
    colorscheme peaksea
else
    colorscheme molokai
endif

Это работает, когда я звоню vimdiff от моей консоли, но не, когда я называю его от Vim с помощью VCS.

Это сменная проблема или a vimrc конфигурация, которая отсутствует?

4
задан 25.01.2013, 18:28

2 ответа

garyjohn, спасибо за внимание, но я нахожу свое решение.Работает!

au FilterWritePost * if &diff | set t_Co=256 | set bg=dark | colorscheme peaksea | else | colorscheme molokai | endif
au BufWinLeave * colorscheme molokai

Источник

0
ответ дан 07.12.2019, 19:57

Vim читает Ваш vimrc однажды при запуске. if &diff оператор выполняется, когда он читается, не каждый раз состояние 'diff' изменения. Один способ выполнить те, которыми цвет управляет, когда Вы выполняетесь :VCSVimDiff должен поместить их в автокоманду в Вашем vimrc, как это.

au FilterWritePre * if &diff | set t_Co=256 | set bg=dark | colorscheme peaksea | endif

где FilterWritePre событие является тем, которое инициировано, когда Vim выполняет различное.

[Комментарий не работал хорошо, таким образом, я добавлю к своему исходному ответу.]

Если Вы хотите закончить VimDiff :q, то, что Вы могли сделать, настраивается другая автокоманда, возможно, с помощью BufWinLeave событие, снова тестируя &diff и выполнение команд для установки системы цветов по умолчанию.

То, что я делаю, использовать следующую команду для удаления буфера, против которого у меня был diff'd, выключите различный режим и восстановите некоторые сохраненные настройки.

command! -bar -bang Nodiff wincmd l <bar> only<bang> <bar> set nodiff noscrollbind scrollopt-=hor wrap foldcolumn=0 virtualedit= foldlevel=99 <bar> if exists("b:fdm") <bar> let &fdm = b:fdm <bar> endif <bar> if exists("b:syn") <bar> let &syn = b:syn <bar> endif

Чтобы сделать и/или сохранить те настройки, когда к различному режиму переходят, я использую следующие автокоманды.

au FilterWritePre * if &diff | set virtualedit=all | endif
au FilterWritePre * exe 'let b:syn = &syn | if &diff | set syn=OFF | endif'
au BufWinEnter * if &fdm != "diff" | let b:fdm = &fdm | endif

Те команды развились за эти годы, который является моим оправданием за их несоответствия.

6
ответ дан 07.12.2019, 19:57

Теги

Похожие вопросы