vim을 diff 도구로 사용하려면 어떻게합니까?


101

vim을 기본 편집기로 사용합니다.

또한 vim을 사용하여 파일을 diff하고 파일을 수정하면서 diff를 수행하면서 쉬운 변경 사항을 수정합니다 (diff / fix / diff / fix의주기 인 대부분의 diff 기술 대신).

또한 소스 제어 도구 / 사이트에서 사용하는 diff 도구에 vim을 쉽게 통합 할 수있는 방법이 있습니다 (특히 git을 생각하고 있지만 다른 사람들이 다른 소스 제어 도구 / 사이트와의 통합에 관심이 있다고 확신합니다).


1
vim-fugitive를 시도하면 명령이 추가 :Gdiff되고 :Gvdiff두 명령 모두 현재 버퍼가 git에 의해 관리되는 경우 현재 버퍼의 단계별 차이점을 볼 수 있습니다. 일부 파일에 병합 충돌이있을 때 그것은 또한 HEPS 당신은 세 개의 창 레이아웃에서 충돌을 해결하기 위해
rbernabe

내 bashrc 에이 간단한 함수가 있고로 vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }호출합니다 vd file1 file2. 그것은 사용하는 diff파일이 차이가 있는지 여부를 확인하기 만 열립니다 vimdiff그 때문에 경우. 그렇지 않으면 나는 껍질에 머물러 있습니다. 또한 확산 할 때 산만 해지기 때문에 Vim에서 구문 강조 표시를 비활성화합니다. 두 파일에서만 작동합니다.
Rolf

답변:


122

vim에는이 기능이 내장되어 있습니다 (올바른 명령 행 플래그 사용).

vim -d <file1> <file2>

그러면 뷰에서 각 파일이 열리고 차이점이 강조 표시됩니다.
동일한 코드는 모두 folded없어 지므로 동일한 코드를 보거나 동일한 코드의 거대한 덩어리를 스크롤 할 필요가 없습니다.

그러나 vimdiff올바른 플래그로 vim을 올바르게 호출 하는 랩퍼 응용 프로그램도 있습니다 .

vimdiff source1.cpp source2.cpp

git을 사용하는 경우 외부 diff 도구를 설정할 수 있습니다. 따라서 vimdiff를 git의 diff 도구로 설정하는 것은 쉽습니다.

git config --global diff.tool vimdiff

vimdiff를 사용할 때 측면과 diff 강조 표시를 편집하여 차이를 보여줍니다.

참고 : git diff에서 편집 할 때. 파일의 리포지토리 저장 버전을 편집하려고 시도하면 종료 할 때 변경 사항이 삭제됩니다 (git는 원본을 신뢰하지 않으므로 tmp 사본과 비교) 로컬 사본을 마음 내용으로 편집하고 현재 버전 위에 저장하십시오.

유용한 몇 가지 기본 명령 vimdiff

dp             diffput: puts changes under the cursor into the other file
                        making them identical (thus removing the diff).
do             diffget: (o => obtain). The change under the cursor is replaced
                        by the content of the other file making them identical.


]c             Jump to the next diff
[c             Jump to the previous diff

vimdiff와 함께 높은 조명을 사용하는 데 사용하는 다른 vim 설정

if &diff
    highlight! link DiffText MatchParen
endif

변경된 코드 비트에서 강조 표시가 해제됩니다. 따라서 변경된 줄이 강조 표시되어 변경 사항을 알 수 있지만 변경된 실제 텍스트는 강조 표시되지 않으므로 줄에 나타납니다.


또한 최대 4 개의 버퍼를 처리하여 구성 파일을 비교하기에 좋습니다
Izkata

34
:diffthisVim이 이미 실행 중일 때 명령을 사용하여 diff를 시작할 수도 있습니다 .
Rich

11
그리고 : diffoff로 끄십시오. vim의 문서에 대한 링크가 도움이 될 것이라고 생각합니다 : vimdoc.sourceforge.net/htmldoc/diff.html
Cody Poll

1
나를 위해 후에도 git config --global diff.tool vimdiff, git diff아직도 내가 아무 것도 변경하지 않는 경우와 같은 모든 것을 보여줍니다.
Hi-Angel

2
시도git difftool
마틴 요크

13

열린 파일을 편집하고 현재 파일을 닫지 않고 다른 파일과 비교하려는 경우 :

분할 화면에서 새 파일을 엽니 다.

수직 분할의 경우 :

:vs otherFile

또는 수평 분할 :

:split otherFile

커서를 다른 분할 화면으로 전환하십시오.

ctrl+w ctrl+w

파일에서 "diff mode"를 호출하십시오.

:diffthis

다른 파일로 전환하고 "diff mode"를 호출하십시오.

:diffthis

"차이 모드"를 끄려면 :

:diffoff

5
당신이 사용할 수있는 버퍼 사이의 전환을 방지하려면 :windo diffthis너무
statox

4

아래에 언급 된 설정을 현재 로그인 한 사용자의 (또는 ) 디렉토리에있는 .gitconfig파일에 배치 할 수 있습니다 .%homepath%%userprofile%

[diff]
    tool = vimdiff

이것은 git bash 도구가 vimdiff를 외부 diff 도구로 사용하기 시작할 수있게합니다.



2

vim을 difftool로 사용하는 상황은 세 가지뿐입니다. 아래에 간단히 설명되어 있습니다.

  • git difftool의 경우 다음을 입력하십시오 ~/.gitconfig.

    [core]
    editor = vim
    [diff]
    tool = vimdiff
    [merge]
    tool = vimdiff
    conflictstyle = diff3
    
  • vim을 두 파일의 diff-tool로 열려면 다음을 수행하십시오.

    vimdiff file1.ext file2.ext      # for vim
    nvim -d file1.ext file2.ext      # for neovim
    
  • 현재 활성화 된 버퍼, 즉 현재 활성화 된 탭 페이지에 창이 할당 된 모든 버퍼에 대한 차이점보기를 얻으려면 다음을 수행하십시오.

    :windo diffthis                " to get diff view
    :windo diffoff                 " to remove diff view
    

자세한 내용은 :h diff


1

여기 내가하는 일이 있습니다.

  • 첫 번째 파일 또는 데이터를 붙여 넣을 경우 텍스트 내용으로 창을 엽니 다.
  • :vnew(두 창을 나란히 놓기 위해) 또는 :new(창을 위아래로 놓기)를 사용하여 다음 파일 / 창을 엽니 다 . 두 번째 창에서 열 특정 파일이있는 경우 다음과 같은 경로를 포함 할 수 있습니다.:vnew /path/to/secondfile.txt
  • F8을 사용하여 diff 모드를 켜고 끄는 사용자 정의 기능을 토글하십시오.

내 사용자 정의 함수는 ~/.vimrc다음과 같습니다.

nmap <silent> <F8> :call ToggleDiff()<CR>
imap <silent> <F8> <C-O>:call ToggleDiff()<CR>
function ToggleDiff ()
    if (&diff)
        set nodiff noscrollbind
    else
        " enable diff options in both windows; balance the sizes, too
        wincmd =
        set diff scrollbind nowrap number
        wincmd w
        set diff scrollbind nowrap number
        wincmd w
    endif
endfunction

당신은 명령을 사용할 수 있습니다 :diffthisdiffoff!그래서 당신은 (예를 들어 cursorbind도 diffmode에 의해 설정된다) 모든 DIFF 옵션을 직접 설정할 필요가 없습니다
기독교 Brabandt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.