저는 vim을 기본 편집기로 사용합니다.
또한 vim을 사용하여 파일을 비교하고 파일을 수정하고 싶습니다. (대부분의 diff / fix / diff / fix의주기 인 대부분의 diff 기술이 아닌) diff를 사용하여 쉽게 변경합니다.
또한 소스 제어 도구 / 사이트에서 사용하는 diff 도구에 vim을 통합하는 쉬운 방법이 있습니다. (특히 git을 생각하고 있지만 다른 사람들이 다른 소스 제어 도구 / 사이트와의 통합에 관심이있을 것이라고 확신합니다.)
댓글
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 difft및diffo!. - 열린 파일 하나로 시작하는 경우
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와 비교
: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
코멘트
-
:diffthis및diffoff!따라서 ‘ 모든 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 ” 키에 따라 다릅니다.
:Gdiff및:Gvdiff명령이 추가됩니다. 두 명령 모두 다음과 같은 경우 현재 버퍼의 나란히 비교를 볼 수 있습니다. 현재 버퍼는 git에 의해 관리됩니다. 또한 일부 파일에서 병합 충돌이있을 때 세 개의 창 레이아웃에서 충돌을 해결하는 데 도움이됩니다.vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }에이 간단한 함수가 있고 호출합니다.vd file1 file2를 사용합니다.diff를 사용하여 파일이 다른지 여부를 확인하고 해당하는 경우vimdiff만 엽니 다. 그렇지 않으면 나는 껍질에 머물러 있습니다. 또한 Vim에서 구문 강조 표시를 비활성화합니다. 비교시 산만 해지기 때문입니다. 2 개의 파일에서만 작동합니다.