문제

나는 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 View에서 벗어나려면 사용할 수 있습니다. :diffoff 명령.

아래는 유사한 기능이며 'cvs diff' 명령...

다른 팁

:w !diff % -

어떤 사람들은 명령에 대한 설명에 대해 물었 기 때문에

:w !diff % -

다음은 더 자세한 답변을 작성하려는 시도입니다.

나는 당신이 시스템에서 일하고 있다고 가정합니다. cat 그리고 echo 설치되었습니다 (예 : 거의 모든 GNU/Linux, Mac OS, BSD 및 기타 UNIX- 유사 시스템).

위 명령은 다음과 같이 작동합니다.

  1. VIM에서 파일을 저장하기위한 구문은 다음과 같습니다.

    :w <filename>
    
  2. VIM에서 쉘 명령을 실행하기위한 구문은 다음과 같습니다.

    :!<command>
    
  3. Vim이 발행 한 쉘 환경 내부 % 현재 파일 이름을 가리 킵니다. 다음을 실행하여이를 확인할 수 있습니다.

    :!echo %
    

    파일 이름을 출력해야합니다 (또는 VIM이 파일 이름없이 실행 된 경우 오류).

    고양이를 사용하여 파일의 내용을 출력 할 수도 있습니다.

    :!cat %
    

    이렇게하면 파일 내용을 마지막으로 저장된 상태 또는 저장되지 않은 경우 오류로 반환해야합니다.

  4. 프로그램 Diff는 표준 입력 (STDIN)에서 읽을 수 있습니다. Man Page는 다음을 나타냅니다.

    ...] 파일이 '-'인 경우 표준 입력을 읽으십시오. [...

  5. 파일 이름없이 저장 명령을 실행하지만 그 뒤에 쉘 명령을 실행하면 vim이 파일 내용을 물리적 파일에 저장하는 대신 쉘의 stdin에 파일 내용을 작성하게됩니다. 실행하여이를 확인할 수 있습니다

    :w !cat
    

    이것은 항상 현재 내용을 인쇄해야합니다 (대신 파일에 기록되었을 것임).

그것을 결합하십시오 (또는 tl; dr) : 파일은 stdin에 "저장"되며, diff는 filename과 stdin을 입력으로 실행합니다.

이것을 알면 파일이 Vimdiff와 이와 같은 일을 비교할 수 있습니다. 이것은 당신이 이것을하고 싶지 않은 아이디어 일뿐입니다.

:w !cat > /tmp/tempFile && vimdiff /tmp/tempFile % && rm /tmp/tempFile

(그런 다음 Readonly를 열고 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 정말 멋지다. 하나의 키 프레스와 소스 컨트롤 리포의 헤드 개정판으로 현재 파일을 차별화합니다. 그것은 많은 SCM과 함께 일하기위한 것입니다. 나는 그것을 Perforce와 함께 사용합니다.

여기에는 다른 답변을 기반으로하는 플러그인이 있습니다. https://github.com/gangleri/vim-diffsaved

그것은 그것을 제공합니다 :w !diff % - 방법과 더 많은 참여 diffthis 하나.

그 외에도 불변 이것을 허용하지만 훨씬 더 많은 것을 허용합니다 (다른 실행 취소 체크 포인트 사이). 비슷하다 건도.

나는 추천 할 수있다 Histwin 플러그인.

그것은 다르지 않지만 현재 저장 파일의 버전 (다른 답변과 마찬가지로) 편집을 시작한 이후 vimdiff가 변경됩니다, 심지어도 다시 하다 순서대로 변경. 차이는 중간에 저장하는 경우를 보여줍니다.

또한 목록을 표시합니다 모든 실행 취소 역사 지점 그리고 당신이 그들 사이를 전환하거나 차이 할 수 있습니다.

추신 : 플러그인은 모든 파일이 변경 된 이후 히스토리 편집에서 순간을 자동으로 추적하지는 않지만, 파일을 저장하여 나중에 vimdiff를 원한다면 파일을 저장하는 순간을 명시 적으로 "태그"할 수 있습니다. 아마도 자동화 될 수 있습니까?

Vimdiff와 같이 VIM을 비교하기 위해 VIM을 사용하려면 다음과 같은 작업을 수행 할 수 있습니다.

.vimrc를 편집하고 추가하십시오.

nmap <F8> :w !vim -M -R - -c ":vnew % \| windo diffthis"<CR><CR>

거기에서 당신은 당신의 변경 사항을보고 사용하여 Diff보기를 종료 할 수 있습니다. qall 명령 모드에서 f8을 눌러 Vimdiff와 마찬가지로. 원하는 키로 F8을 교체하십시오.

편집 : 수정이 저장되지 않기 때문에 수정을 허용하지 않기 위해 -M을 추가했습니다.

위의 내용을 따르십시오. 내가 많이 좋아하는 git diff를 사용한다고 제안합니다.

:w !git diff  % -
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top