[diff] Vim에 파일을 저장하기 전에 변경 사항을 볼 수 있습니까?
Vim을 사용합니다. 파일을 엽니 다. 편집 한 후 저장하기 전에 편집 한 내용을보고 싶습니다.
Vim에서 어떻게해야합니까?
답변
http://vim.wikia.com/wiki/Diff_current_buffer_and_the_original_file
다음은 현재 편집 된 파일과 파일 시스템에서 수정되지 않은 버전 사이의 차이점을 보는 기능 및 명령입니다. 이것을 vimrc 또는 플러그인 디렉토리에 넣고 파일을 열고 저장하지 않고 수정하고 수행하십시오
:DiffSaved
.function! s:DiffWithSaved() let filetype=&ft diffthis vnew | r # | normal! 1Gdd diffthis exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype endfunction com! DiffSaved call s:DiffWithSaved()
diff보기에서 벗어나려면
:diffoff
명령을 사용할 수 있습니다 .아래는
'cvs diff'
명령 을 모방하기 위해 유사한 기능입니다 …
답변
:w !diff % -
답변
어떤 사람들은 명령에 대한 설명을 요구했기 때문에
:w !diff % -
더 자세한 답변을 작성하려는 시도는 다음과 같습니다.
나는 당신이 설치되어 cat
있고 echo
설치된 시스템 (예를 들어, 거의 모든 GNU / Linux, Mac OS, BSD 및 다른 유닉스 계열 시스템)에서 작업하고 있다고 가정합니다 .
위의 명령은 다음과 같이 작동합니다.
-
vim에 파일을 저장하는 구문은 다음과 같습니다.
:w <filename>
-
vim에서 쉘 명령을 실행하는 구문은 다음과 같습니다.
:!<command>
-
vim이 발행 한 셸 환경
%
에서 현재 파일 이름을 가리 킵니다. 다음을 실행하여이를 확인할 수 있습니다.:!echo %
이것은 파일 이름을 출력해야합니다 (또는 vim이 파일 이름없이 실행 된 경우 오류).
cat을 사용하여 파일의 내용을 출력 할 수도 있습니다.
:!cat %
파일 내용을 마지막 저장 상태로 저장하거나 저장하지 않은 경우 오류를 반환해야합니다.
-
프로그램 diff는 표준 입력 (stdin)에서 읽을 수 있습니다. 해당 매뉴얼 페이지에는 다음이 나와 있습니다.
[…] 파일이 ‘-‘인 경우 표준 입력을 읽습니다. […]
-
파일 이름없이 쉘 명령 대신 save 명령을 실행하면 vim은 파일 내용을 실제 파일에 저장하는 대신 쉘의 stdin에 기록합니다. 당신은 이것을 실행하여 이것을 확인할 수 있습니다
:w !cat
항상 파일에 현재 내용을 인쇄해야합니다 (대신 파일에 기록되었을 것임).
파일 정리 (또는 tl; dr) : 파일이 stdin에 “저장”되고, diff는 파일 이름과 stdin을 입력으로 실행됩니다.
이것을 아는 것은 vimdiff와 파일을 다음과 같이 비교할 수도 있습니다-이것은 당신이 이것을하고 싶지 않은 아이디어 일뿐입니다.
:w !cat > /tmp/tempFile && vimdiff /tmp/tempFile % && rm /tmp/tempFile
(판독 전용이어서 개폐 vimdiff 사용하여 :qall
)
답변
나는 항상 diffchanges를 좋아했습니다. 훌륭하고 간단합니다.
답변
vimrc_example.vim에서 :
" Convenient command to see the difference between the current buffer and the
" file it was loaded from, thus the changes you made.
if !exists(":DiffOrig")
command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
\ | wincmd p | diffthis
endif
답변
다음을 소싱하고 : DIFF 명령을 사용하십시오.
function! s:diff()
let tmpa = tempname()
let tmpb = tempname()
earlier 100h
exec 'w '.tmpa
later 100h
exec 'w '.tmpb
update
exec 'tabnew '.tmpa
diffthis
vert split
exec 'edit '.tmpb
diffthis
endfunction
command! -nargs=0 DIFF call <SID>diff()
답변
정확히 당신이 찾고있는 것이 아니라 SCMDiff.vim 이 정말 멋집니다. 한 번의 키 누르기와 소스 컨트롤 리포지토리의 헤드 개정판으로 현재 파일을 강조 표시합니다. 많은 SCMS와 함께 작동합니다. 나는 perforce와 함께 사용합니다.