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

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