Vim 프로세스가 갑자기 종료되면 (예 : 시스템 충돌) SWP 파일이 남습니다. 나중에 Vim에서 원본 파일을 열면 복구 옵션이 제공됩니다. 대부분 저장하는 습관이 있기 때문에 대부분의 경우 복구 된 파일은 저장된 파일과 동일합니다. 그런 다음 Vim은 말합니다.
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
물론 지금 .swp 파일을 삭제하고 싶습니다!
이 경우 Vim이 항상 SWP 파일을 자동으로 삭제하도록하려면 어떻게해야합니까?
이 작업을 수행 할 수있는 기본 설정이없는 것 같아서 적절한 자동 명령 이벤트를 찾고 있습니다.
내가 찾은 한 가지 방법 :e #
은 메시지 뒤에서 스왑 존재 옵션을 다시 표시하는 것입니다. 그런 다음 “삭제”를 수행 할 수 있습니다. 그러나 매번 추가 단계를 수행 할 필요는 없습니다.
답변
참고 : 사용중인 운영 체제를 말하지 않았습니다. 다음은 Unix 쉘에서 작동하지만 Windows를 실행하는 경우 베어 본 Cygwin 또는 다른 쉘을 다운로드 할 수 있습니다.
나는 당신과 같은 일을했고 :e
, 같은 파일을 다시 열어서 복구 파일을 삭제하는 옵션을 얻었습니다. 충돌 또는 예기치 않은 컴퓨터 재시작 vim -r
후 스왑 파일에서 실행 하고 복구가 진행되도록하여 나머지 Vim 복구 파일을 모두 정리 합니다.
파일이 변경 되지 않은 경우
파일이 변경되지 않은 경우 복구 파일을 즉시 삭제하고 싶습니다. Vim이 자동으로이 작업을 수행 할 수 있으면 좋지만 불행히도 그렇지 않습니다.
파일이 변경된 경우
파일이 변경되면 DiffOrig
명령을 실행 하여 원래 버전과 복구 된 버전의 차이점을 비교합니다. 복구 파일의 변경 사항에 만족하면 :x
명령을 사용 하여 파일을 저장하여 종료합니다 . 그렇지 않은 경우로 종료하여 복구 된 변경 사항을 삭제합니다 :q!
. 복구 파일이 저장된 파일과 연결되어 있지 않은 경우 (예 :)는 .swp
보통 :w filename
복구 된 버퍼를 파일 이름을 가진 파일에 저장하는 데 사용합니다 .
DiffOrig 도우미
항상 사용할 수 있도록 DiffOrig 명령을 추가했습니다 .vimrc
.
command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis
쉘 스크립트
쉘에서 다음 스크립트를 실행하여 현재 디렉토리 트리에서 모든 스왑 파일을 찾습니다. 그런 다음 각 스왑 파일을 사용하여 “복구 모드” 에서 Vim을 열고 Vim을 닫은 후에 삭제됩니다.
find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;
rm -i
옵션을 확인 (필요 y
파일을 삭제). 자신감이 있고 프로세스 속도를 높이려면 생략 할 수 있습니다.