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
та виконуючи команди, щоб встановити стандартну схему кольорів за замовчуванням.
Що я роблю, це використовувати наступну команду, щоб видалити буфер, проти якого я відрізнявся, вимкнути диф-режим і відновити збережені параметри.
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
Щоб здійснити та / або зберегти ці налаштування, коли введено режим Diff, я використовую такі автокоманди.
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
Ці команди розвивались роками, що є моїм виправданням за їх непослідовність.