Я использую плагин 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
конфигурация, которая отсутствует?
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
Те команды развились за эти годы, который является моим оправданием за их несоответствия.