Vim читает ваш vimrc один раз при запуске. Оператор if &diff
выполняется при чтении, а не каждый раз, когда изменяется состояние 'diff'
. Один из способов выполнения этих цветовых команд при выполнении :VCSVimDiff
- поместить их в автокоманду в вашем vimrc, например так.
au FilterWritePre * if &diff | set t_Co=256 | set bg=dark | colorscheme peaksea | endif
где событие FilterWritePre
вызывается, когда Vim выполняет diff.
[Комментарий не сработал, поэтому я добавлю к своему первоначальному ответу.]
Если вы хотите завершить VimDiff с помощью :q
, вы могли бы установить другую автокоманду, возможно, используя событие BufWinLeave
, снова протестировать &diff
и выполнить команды, чтобы установить цветовую схему по умолчанию.
Я использую следующую команду, чтобы удалить буфер, с которым у меня был diff, отключить режим diff и восстановить некоторые сохраненные настройки.
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
Эти команды развивались годами, что является моим оправданием их несоответствий.