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

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

또한 vim을 사용하여 파일을 비교하고 파일을 수정하고 싶습니다. (대부분의 diff / fix / diff / fix의주기 인 대부분의 diff 기술이 아닌) diff를 사용하여 쉽게 변경합니다.

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

댓글

  • vim-fugitive를 사용하면 :Gdiff:Gvdiff 명령이 추가됩니다. 두 명령 모두 다음과 같은 경우 현재 버퍼의 나란히 비교를 볼 수 있습니다. 현재 버퍼는 git에 의해 관리됩니다. 또한 일부 파일에서 병합 충돌이있을 때 세 개의 창 레이아웃에서 충돌을 해결하는 데 도움이됩니다.
  • 제 bashrc vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }에이 간단한 함수가 있고 호출합니다. vd file1 file2를 사용합니다. diff를 사용하여 파일이 다른지 여부를 확인하고 해당하는 경우 vimdiff 만 엽니 다. 그렇지 않으면 나는 껍질에 머물러 있습니다. 또한 Vim에서 구문 강조 표시를 비활성화합니다. 비교시 산만 해지기 때문입니다. 2 개의 파일에서만 작동합니다.

Answer

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

vim -d <file1> <file2> 

보기에서 각 파일을 열고 차이점을 강조 표시합니다.
동일한 코드는 folded 멀리 떨어져 있으므로 동일한 코드를 보거나 동일한 코드의 거대한 덩어리를 스크롤 할 필요가 없습니다.

하지만 올바른 플래그로 vim을 올바르게 호출하는 래퍼 애플리케이션 vimdiff도 있습니다.

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 개의 버퍼를 처리하므로 구성 파일 비교에 적합합니다.
  • :diffthis 명령을 사용하여 Vim이 이미 실행 중이면 diff.
  • 그리고 : diffoff를 사용하여 끕니다. vim ‘ 문서에 대한 링크가 도움이 될 것이라고 생각합니다. vimdoc.sourceforge.net/htmldoc/diff.html
  • git config --global diff.tool vimdiff 이후에도 git diff는 아무것도 변경하지 않는 것처럼 모든 것을 보여줍니다.
  • git difftool

답변

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

분할 화면에서 새 파일 열기 :

수직 분할의 경우 :

:vs otherFile 

또는 수평 분할 :

:split otherFile 

커서를 다른 분할 화면으로 전환 :

ctrl+w ctrl+w 

파일에서 “diff mode”호출 :

:diffthis 

다른 파일로 전환하고 “diff mode”호출 :

:diffthis 

diff 모드를 끄려면 :

:diffoff 

댓글

  • 베트 위 전환 방지 n 버퍼에서 :windo diffthis도 사용할 수 있습니다.
  • @statox : diffoff에서도 작동하므로 :windo diffthis:windo diffoff는 열려있는 두 개의 창에 대해 시작 중지 합니다. 또는 약어 :windo difftdiffo!.
  • 열린 파일 하나로 시작하는 경우 File1, :vert diffs File2를 사용하여 오른쪽의 세로 분할에서 File2를 열고 .

답변

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

[diff] tool = vimdiff 

이렇게하면 git bash 도구가 vimdiff를 외부 비교 도구로도 사용할 수 있습니다.

Answer

다음은 내 자식 구성입니다.

https://github.com/tracyone/dotfiles/blob/master/.gitconfig

[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 [difftool] prompt = 0 

Answer

NeoVim의 경우 ~/.gitconfig 다음 명령으로

git config --global merge.tool nvim git config --global mergetool.keepBackup false git config --global mergetool.nvim.cmd $"nvim -d $LOCAL $REMOTE $MERGED -c \"$wincmd w\" -c \"wincmd J\"" 

~/.gitconfig는 다음과 같이 표시됩니다.

[merge] tool = nvim [mergetool] keepBackup = false [mergetool "nvim"] cmd = nvim -d $LOCAL $REMOTE $MERGED -c "$wincmd w" -c "wincmd J" 

원하는대로 구성하는 방법에 대한 자세한 내용은 Nvim 문서 : diff 를 참조하세요.

답변

세 앉아 만 볼 수 있습니다. vim을 difftool로 사용하는 방법. 아래에 간략하게 설명되어 있습니다.

  • git difftool의 경우 ~/.gitconfig에 다음을 입력하세요.

    [core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 
  • 두 파일에 대한 비교 도구로 vim을 열려면 다음을 수행하십시오.

    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

댓글 을 참조하세요. h3>

  • 아직 하나의 파일 만 열려있는 경우 : :vert diffs File2-File2와 비교

답변

내 작업은 다음과 같습니다.

  • 첫 번째 파일 (또는 붙여 넣는 경우 텍스트 내용)이있는 창을 엽니 다. 데이터)
  • :vnew (두 창을 나란히 표시) 또는 :new를 사용하여 다음 파일 / 창 열기 ( 창문 상단과 b를 가지려면 ottom). 두 번째 창에서 열 특정 파일이있는 경우 다음과 같은 경로를 포함 할 수 있습니다. :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! 따라서 ‘ 모든 diff 옵션을 직접 설정할 필요가 없습니다 (예 : cursorbind는 diffmode에서도 설정 됨).

Answer

저는 diff 모드 (하단)에서 몇 가지 유용한 명령과 함께 .vimrc를 채택했습니다. 일반 모드에서 편집하면 설정이 재설정됩니다 (상단). .vimrc 파일에 간단히 복사 할 수 있습니다.

nmap <silent> <F2> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR> inoremap <Esc>Oq 1 inoremap <Esc>Or 2 inoremap <Esc>Os 3 inoremap <Esc>Ot 4 inoremap <Esc>Ou 5 inoremap <Esc>Ov 6 inoremap <Esc>Ow 7 inoremap <Esc>Ox 8 inoremap <Esc>Oy 9 inoremap <Esc>Op 0 inoremap <Esc>On . inoremap <Esc>OQ / inoremap <Esc>OR * inoremap <Esc>Ol + inoremap <Esc>OS - inoremap <Esc>OM <Enter> nnoremap <Esc>OQ B " / nnoremap <Esc>OR E " * if &diff map <Esc>Oq zc " 1 close a fold map <Esc>Or <down> " 2 cursor down map <Esc>Os ]c " 3 next diff nmap <Esc>Ot <left> " 4 curosor left nnoremap <Esc>Ou <c-w>w " 5 jump to next file map <Esc>Ov <right> " 6 cursor right map <Esc>Ow zo " 7 open a fold map <Esc>Ox <up> " 8 curosor right map <Esc>Oy [c " 9 prefious diff map <Esc>Op 0 " 0 0 nmap <Esc>On . " . . nmap <Esc>OQ B " / back one word nmap <Esc>OR E " * end of word nmap <Esc>Ol dp " - diffput nmap <Esc>OS do " + diffget nmap <Esc>OM :diffupdate " Enter endif 

물론 내 설정을 변경할 수 있습니다. ” 0 “에 다른 명령을 입력하려면 ” Op ” 예 접기와 펼치기 사이를 전환하는 ” za ” 사용 :

 nmap <Esc>Op za " 0 0 

“지도 ” 및 ” nmap ” 키에 따라 다릅니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다