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
Эти команды развивались годами, что является моим оправданием их несоответствий.