VIM 스왑 파일 모범 사례?


14

연결을 끊어 vim에서 세션을 끊을 때마다 dred로 가득 차 있습니다 (그러나 vim을 계속 사용합니다 ... 나는 Masochistist가 있어야합니다). 파일이 내 작업을 파기 할 때까지 기다렸습니다. vim 스왑 파일 작업에 대한 모범 사례는 무엇입니까? 당신은 가장 새로운 것을 선택합니까? 파일이 원하는 방식으로 작동하면 스왑 파일 만 삭제합니까? 그것들을 어떻게 제거합니까?


5
작업을 보호하기 위해 스왑 파일이 있습니다. gnu 화면 사용을 고려하십시오.

1
기능을 끄고 싶지 않습니다. 성가 시지만 유용한 상태입니다.
leeand00

1
나는 그것을 올바르게 사용하는 방법을 알고 싶습니다.
leeand00

2
@ DrEval 나는 tmux를 사용합니다
leeand00

2
tmux를 사용하는 경우 연결이 끊어 질 염려가 없어야합니다. 다시 연결하면 세션에 다시 연결하기 만하면됩니다. 또한 mosh 및 @ ChristianBrabandt 's Recover 플러그인 에 관심이있을 수 있습니다 .
Rich

답변:


23

당황하지 마십시오!

vim 사용자가 직접 작성할 때까지 변경 사항을 작성하지 않으므로 파일 복구는 항상 안전 합니다. 따라서 스왑 파일에서 복구 한 다음 저장하지 않고 닫아도 아무런 변화가 없습니다.

스왑 파일을 구성하십시오.

모든 스왑 파일을 같은 장소에두기 위해 vim을 사용하십시오.

set directory^=$HOME/.vim/swap//

또는 원하는 곳 어디에서나. //파일 이름 끝에 사용 하면 vim이 스왑 파일 이름에 절대 파일 경로를 사용하므로 이름 충돌이 발생하지 않습니다. 디렉토리가 존재하는지 또는 vim이 디렉토리를 사용하지 않는지 확인하십시오 (생성하지는 않음).

참고 : 이것은 환경 변수에서만 작동합니다. vimscript 변수를 사용하려면 :execute마술 을 사용해야 합니다.

execute "set directory^=".my_vim_home_var."/swap//"

차이점을 구별하십시오.

Vim의 도움은이 상황에서 사용할 수있는 매우 유용한 명령을 제안합니다 :DiffOrig. 그것은의 기본 정력 명령하지 그래서에서 구현을 복사, :h :DiffOrig귀하의 vimrc에. ( $VIMRUNTIME/defaults.vimvim8이 있는 경우 에도 있습니다 ). 이제 파일을 복구하고 DiffOrig를 실행하여 수정되지 않은 버전에서 변경된 사항에 대한 정보를 얻을 수 있습니다.

여러 스왑 파일의 내용을 비교하려면 파일을 서로 다른 스왑 파일로 복구 한 다음 결과를 임시 파일에 씁니다. 이제 파일을로드하고 :diffthis각 파일에서 실행 하고 원하는대로 변경 한 후 원래 파일에 다시 쓰고 임시 파일과 스왑 파일을 삭제하십시오.

유용한 명령 :

:swapname: vim이 현재 버퍼의 스왑 파일에 사용하는 이름을 얻습니다 ( :h :swapname) :recover: vim을 시작할 때와 같은 방식으로 선택한 파일을 복구하고 R( :h :recover)를 누릅니다.

도움말을 확인하십시오.

Vim은 복구에 관한 사용자 매뉴얼의 전체 섹션을 가지고 :usr_11.txt
있습니다 : 스왑 파일에 대한 Vim의 참조 도움말 : :h swap-file, h recovery
디렉토리 옵션에 대한 도움말 (스왑 파일 위치 설정) ::h 'directory'

편집 : @B Layer의 주석에서 지적한 것처럼 디렉토리 설정에 대한 수정 된 예


여러 개의 스왑 파일로 끝나는 경우는 어떻습니까? 연결이 많이 끊어져서?
leeand00

1
나는 "차이점 차이"의 두 번째 단락에서 언급했다. diff를 사용하여 유지할 변경 사항을 결정하면 모든 임시 파일과 이전 스왑 파일을 삭제하십시오 (이제 모든 스왑 파일의 위치를 ​​알고 있습니다).
flemingfleming

1
참고로, 당신은 사용할 필요가 없습니다 exec... set directory^=$HOME/.vim/swap//긴만큼 잘 작동 $HOME초기화 된 환경 변수입니다. 참조하십시오 :h expand-env. 또한 작동 dictionary, undodir그리고 backupdir몇 가지 이름을.
B Layer

상기시켜 주셔서 감사합니다! 대신 구성에서 vimscript 변수를 사용하므로 실행 및 환경 변수가 필요하지 않습니다. 그것을 생각할 때, 아마도 vim을 사용하여 환경 변수를 대신 설정해야합니다.
flemingfleming

2

개인적으로 스왑 파일과 백업 파일은 어디서나 스왑 파일과 백업 파일을 생성하고 종종 충돌을 일으키기 때문에 스왑 및 백업 파일을 해제했습니다. Vim의 지속적 실행 취소 기능은 훨씬 더 안정적이며 오류가 없습니다.

Vim은 현재 영구 실행 취소 기능을 가지고 있으며 훨씬 세분화 된 백업 방법입니다. 를 누를 때마다 Esc파일의 현재 상태가 캡처됩니다.

:undolist, 또는 gundo 또는 undo-tree 와 같은 플러그인을 사용 하여 실행 취소 기록을 찾아 볼 수 있습니다.

이 방법으로 vim을 사용하려면 :

  • 각 파일의 편집 히스토리가 캡처되는 디렉토리를 작성하십시오.
  • vim에게 그 디렉토리를 사용하도록 지시
  • 영구 실행 취소 사용

쉘에서 :

mkdir ~/.vim/undodir

Vim에서

set undodir=~/.vim/undodir
set undofile

스왑 파일을 끄려면 : :set noswapfile


1
이 답변에는 몇 가지 큰 문제가 있습니다. 1. 영구 실행 취소는 파일을 바꾸는 다른 문제를 해결합니다 ( 'writebackup'또 다른 문제를 해결합니다). 영구 실행 취소 기능을 활성화해도 컴퓨터가 충돌하는 경우 도움이되지 않습니다. 당신은 할 수 스왑 파일이 다른 이유 (현대 OS의 안정성, UPSes의 존재)을 위해 필요하지만, 당신이 대답하지 않은 주장한다. 2. 설정 'undodir' 영구 실행 취소를 활성화 하지 않습니다 ! 'undofile'이것을 설정해야합니다
Rich
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.