Vim-복구 후 원본 파일이 변경되지 않은 경우 자동으로 SWP 파일 삭제


9

Vim 프로세스가 갑자기 종료되면 (예 : 시스템 충돌) SWP 파일이 남습니다. 나중에 Vim에서 원본 파일을 열면 복구 옵션이 제공됩니다. 대부분 저장하는 습관이 있기 때문에 대부분의 경우 복구 된 파일은 저장된 파일과 동일합니다. 그런 다음 Vim은 말합니다.

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

물론 지금 .swp 파일을 삭제하고 싶습니다!

이 경우 Vim이 항상 SWP 파일을 자동으로 삭제하도록하려면 어떻게해야합니까?

이 작업을 수행 할 수있는 기본 설정이없는 것 같아서 적절한 자동 명령 이벤트를 찾고 있습니다.

내가 찾은 한 가지 방법 :e #은 메시지 뒤에서 스왑 존재 옵션을 다시 표시하는 것입니다. 그런 다음 "삭제"를 수행 할 수 있습니다. 그러나 매번 추가 단계를 수행 할 필요는 없습니다.


감사! 나는 당신의 :e #트릭이 이상적이지는 않지만 아래의 현재 답변보다 여전히 유용하다는 것을 알았습니다 . :-)
RayLuo

답변:


5

참고 : 사용중인 운영 체제를 말하지 않았습니다. 다음은 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파일을 삭제). 자신감이 있고 프로세스 속도를 높이려면 생략 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.