
파일을 편집하는 동안 diff의 실시간 보기를 원합니다. vimdiff
두 파일 간의 차이점을 강조하는 등 내가 원하는 작업을 수행할 수 있습니다.
vimdiff
그러나 나를 방해하는 두 가지 단점이 있습니다 .
첫째, 비교를 위해 동일한 파일을 독립적으로 버퍼링할 수 없습니다 diff
. 이 문제는 쉽게 해결할 수 있습니다. 편집 중인 파일의 임시 복사본을 만들어 동일한 파일을 독립적으로 버퍼링하도록 diffvim
만드는 다음 셸 스크립트(호칭)가 있습니다 .vimdiff
#!/bin/sh
# Differentially Viming
TMPDIR=/tmp/diffvim
FILENM=$1
FILEBN=$(basename $FILENM)
if [ ! -d "$TMPDIR" ]; then
mkdir $TMPDIR
fi
cp $FILENM $TMPDIR/$FILEBN && vimdiff $FILENM $TMPDIR/$FILEBN
두 번째 단점은 vimdiff
편집이비차이동일한 파일의 두 복사본 중 하나의 일부는 diff
차이를 다시 계산하도록 트리거되지 않습니다. 를 호출하여 수동으로 수행해야 합니다 :diffupdate
. 이 재계산을 자동화하고 싶습니다. 제가 느끼는 비교적 편리한 방법은 내가 종료할 때 트리거하는 것입니다.끼워 넣다모드를 입력하고정상방법. 내 .vimrc
파일 에 다음 매핑을 추가하면 이 작업도 쉽게 수행할 수 있습니다 .
inoremap <Esc> <Esc>:diffu<CR>
그러나 아직 완벽한 솔루션은 아닙니다. 왜냐하면 내가정상모드, 즉 진입 후 종료가 필요하지 않습니다.끼워 넣다모드에서는 편집이 완료된 후에도 재계산이 자동으로 실행되지 않습니다. 그래서 내 .vimrc
파일 에 또 다른 매핑을 추가합니다 .
nnoremap <Esc> :diffu<CR>
그런데 이번에는 이상한 일이 일어납니다. 편집하기 위해 파일을 열 때 일부 표준 키 바인딩이 제대로 작동하지 않습니다. 예를 들어, 키를 누르 h
거나 l
(즉, 파일을 연 후 실행하는 첫 번째 명령인 경우) 모두 다음으로 이동합니다.끼워 넣다모드, 키를 누르거나 j줄 G이나 전체 내용 등을 삭제합니다. 그러나 파일을 연 후 키를 Esc먼저 누르면 해당 명령이 제대로 작동합니다.
무엇이 잘못되었는지 아시나요? 해결 방법이 있나요?
답변1
vimdoc을 살펴본 후 autocmd
, 제가 원하는 것을 정확히 수행하는 솔루션을 찾은 것 같습니다.
autocmd CursorMoved,CursorMovedI * diffupdate
그의 제안에 대해 Ingo에게 많은 감사를 드립니다!
답변2
<Esc>
특수키의 여러 키코드에도 사용되며, 단말기에 인쇄하는 역할을 합니다.
특히 당신처럼 침입적인 일을 할 때 과부하를 주는 것은 나쁜 생각입니다. 예를 들어 다른 키를 사용하거나 <Leader><Leader>
이벤트에 대한 트리거를 정의합니다.
:autocmd InsertEnter,InsertLeave * diffupdate