Vim 내부에서 vimdiff를 호출 할 때 색 구성표 변경


4

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

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

나는 내 안에있다 vimrc:

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

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

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

답변:


6

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

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


흥미 롭군 실제로 작동합니다. VimDiff를 : q로 끝내면 원래의 색 구성표로 "돌아 오는"솔루션을 알고 있습니까?
누군가 아직도 당신을 사용합니다 MS-DOS

VimDiff를 : q로 끝내려면 BufWinLeave 이벤트를 사용하고 diff &를 다시 테스트하고 기본 색상 구성표를 설정하는 명령을 다시 실행하여 다른 자동 명령을 설정하면됩니다. 내가하는 일은 다음 명령을 사용하여 diff'd했던 버퍼를 삭제하고 diff 모드를 끄고 저장된 설정을 복원하는 것입니다. 명령! -bar -bang Nodiff wincmd l <bar> 만 <bang> <bar> set nodiff noscrollbind scrollopt- = hor rapcolumn = 0 virtualedit = foldlevel = 99 <bar> 존재하는 경우 ( "b : fdm") <bar> let & fdm = b : fdm <bar> endif <bar> 존재하는 경우 ( "b : syn") <bar> let & syn = b : syn <bar> endif
garyjohn

위의 의견 내용을 답변으로 옮겼습니다.
garyjohn

Vim 7.4는 diff 모드를 끌 때 설정을 복원합니다.
Christian Brabandt

1

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.