Vim 내부에서 vimdiff를 호출 할 때 색 구성표 변경 VCSCommand 플러그인을 사용하고 있습니다. Vim

VCSCommand 플러그인을 사용하고 있습니다.

Vim 내부에서 VimDiff 유틸리티를 호출하여 호출 :VCSVimDiff합니다.

나는 내 안에있다 vimrc:

if &diff
    set t_Co=256
    set background=dark
    colorscheme peaksea
else
    colorscheme molokai
endif

vimdiff콘솔에서 호출 할 때 작동 하지만 VCS를 사용하여 Vim에서 호출 할 때는 작동 하지 않습니다.

플러그인 문제 vimrc입니까, 누락 된 구성입니까?



답변

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’d했던 버퍼를 삭제하고 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

이러한 명령은 수년에 걸쳐 발전해 왔으며, 이것이 불일치에 대한 변명입니다.


답변

불행히도 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


답변

garyjohn , 시간 내 주셔서 감사하지만 내 솔루션을 찾습니다. 작동합니다!

au FilterWritePost * if &diff | set t_Co=256 | set bg=dark | colorscheme peaksea | else | colorscheme molokai | endif
au BufWinLeave * colorscheme molokai

출처


답변