파일을 편집하면서 실시간으로 차이점을 확인하고 싶습니다. 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