vim에서 실시간 diff 모드 편집

vim에서 실시간 diff 모드 편집

파일을 편집하는 동안 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(즉, 파일을 연 후 실행하는 첫 번째 명령인 경우) 모두 다음으로 이동합니다.끼워 넣다모드, 키를 누르거나 jG이나 전체 내용 등을 삭제합니다. 그러나 파일을 연 후 키를 Esc먼저 누르면 해당 명령이 제대로 작동합니다.

무엇이 잘못되었는지 아시나요? 해결 방법이 있나요?

답변1

vimdoc을 살펴본 후 autocmd, 제가 원하는 것을 정확히 수행하는 솔루션을 찾은 것 같습니다.

autocmd CursorMoved,CursorMovedI * diffupdate

그의 제안에 대해 Ingo에게 많은 감사를 드립니다!

답변2

<Esc>특수키의 여러 키코드에도 사용되며, 단말기에 인쇄하는 역할을 합니다.

특히 당신처럼 침입적인 일을 할 때 과부하를 주는 것은 나쁜 생각입니다. 예를 들어 다른 키를 사용하거나 <Leader><Leader>이벤트에 대한 트리거를 정의합니다.

:autocmd InsertEnter,InsertLeave * diffupdate

관련 정보