VCSCommand プラグインを使用しています。
:VCSVimDiff
を呼び出して、Vim内でVimDiffユーティリティを呼び出しています。
vimrc
にあります:
if &diff
set t_Co=256
set background=dark
colorscheme peaksea
else
colorscheme molokai
endif
コンソールからvimdiff
を呼び出すと機能しますが、VCSを使用してVimから呼び出すと機能しません。
これはプラグインの問題ですか、それともvimrc
構成がありませんか?
Vimは起動時にvimrcを1回読み取ります。 if &diff
ステートメントは、'diff'
の状態が変化するたびにではなく、読み取られたときに実行されます。 :VCSVimDiff
を実行するときにこれらのカラーコマンドを実行する1つの方法は、次のように、vimrcの自動コマンドにそれらを配置することです。
au FilterWritePre * if &diff | set t_Co=256 | set bg=dark | colorscheme peaksea | endif
ここで、FilterWritePre
イベントは、Vimがdiffを実行したときにトリガーされるイベントです。
[コメントがうまくいかなかったので、元の回答に追加します。]
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
差分モードに入ったときにこれらの設定を行ったり保存したりするには、次の自動コマンドを使用します。
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
これらのコマンドは何年にもわたって進化してきましたが、これが矛盾の言い訳です。
残念ながら、Vimには明示的なdiffモードイベントがありません。あなたは他の答えからの提案でそれをある程度ハックすることができます。
そのアプローチの代わりに、diffthis
とdiffoff
をラップする関数を作成し、その関数の設定を変更することができます。
nnoremap <leader>df :call ToggleDiff()<CR>
function! ToggleDiff()
if &diff
diffoff
setlocal syntax=on
else
diffthis
setlocal syntax=off
endif
endfunction