.swp 파일이있는 파일을 열 때 경고를 제거하는 방법은 무엇입니까?


43

.swp 파일이있는 파일을 열 때 성가신 경고를 제거하려면 어떻게해야합니까? 또는 어떻게 .swp 파일을 생성하지 않습니까? 경고 예 :

E325: ATTENTION
Found a swap file by the name ".notes.swp"
          owned by: james   dated: Fri Dec  3 17:38:07 2010
         file name: ~james/school/se/project-dir/rottencucumber/doc/notes
          modified: no
         user name: james   host name: james-laptop
        process ID: 2251 (still running)
While opening file "notes"
             dated: Fri Dec  3 18:46:10 2010
      NEWER than swap file!

(1) Another program may be editing the same file.
    If this is the case, be careful not to end up with two
    different instances of the same file when making changes.
    Quit, or continue with caution.

(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r notes"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".notes.swp"
    to avoid this message.

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

답변:


41

저장하지 않은 텍스트를 잃어 버리지 않으 려면이 메시지가 실제로 중요합니다 . 그것은해야 하지 성가신 간주하고해야 하지 당신이 급하게 스왑 파일을 삭제하거나 구성하는 원인이 vim없이 실행합니다.

편집하는 모든 파일 vim에는 편집 하는 동안 해당 스왑 파일이 있으며vim 변경 사항을 추적 하는 데 사용됩니다. 파일 편집을 종료 vim하면 해당 스왑 파일이 자동으로 삭제됩니다. 따라서 스왑 파일이 존재하고 원본 파일을 덮어 쓰려는 시도가 고려 및 적절한 조치의 원인이되어야합니다.

메시지에 제시된 두 가지 시나리오 ( E325: ATTENTION Found a swap file)는 실제로 매우 일반적입니다. (1) 다른 vim프로그램이 편집하려고하는 것과 동일한 파일을 편집하고 있습니다 (실제로 다른 사람 일 수 있음-이 경우에는 실제로 의미가 없습니다) 그냥 맹목적으로 스왑 파일을 삭제합니다 - 또는 다른 터미널 창이나 탭)에서 당신이 될 수도 있고, (2) 이전 vim세션이 충돌 (대부분이 원격으로 편집 할 때 발생하고, 네트워크 세션이 절단됩니다 - 한 vim 세션이 정상적으로 종료되지 않고 .swp파일이 남아있는 경우 (두 번째 시나리오의 또 다른 예는 활성 또는 백그라운드 vim세션 이있는 터미널 창 또는 탭을 실수로 닫은 것입니다 ).

이 메시지가 나타 났을 때 나는 보통 여러 개의 탭이있는 여러 개의 터미널 창으로 작업하기 때문에 다른 터미널 창이나 탭에서이 파일을 편집하고 있는지에 대해 먼저 생각합니다.

여기에 이미지 설명을 입력하십시오

다른 곳에서 편집 중이라는 것을 알고 다시 돌아올 수 있으면 이 추가 세션 의 q키를 누르고 (Q)uit원래 vim세션을 통해 편집으로 돌아갑니다 .

때로는 확실하지 않은 경우 , 정확히 동일한 터미널에서 실행 중인지 확인하기 위해 (Q)uit실행 jobs합니다 vim. 아무것도 나타나지 않으면 다른 곳에서 ps -ef | grep vim실행 중인지 vim(예 : 다른 터미널 창 또는 탭에서) 확인합니다. 요점은 항상 원래 vim세션을 통해 편집을 다시 시작하려고한다는 것 입니다.


내가 원래 편집 세션에 반환 할 수 있음을 확신하고 난 여전히 다음과 같은 옵션이 제공하고 있다면, 나는 누르 r(R)ecover.

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

를 누르면 r다음과 같은 메시지가 나타납니다.

Swap file ".notes.swp" already exists!
"notes" 18L, 46C
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.

Press ENTER or type command to continue

내가 쉘 프롬프트에서이기 때문에, 다른 한편, 만약 그때 내가 실행, 더 이상 이러한 옵션에 직면 생각하지 vim-r다음과 같이 옵션 :

vim -r notes

결과 메시지는 비슷합니다.

Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.

Press ENTER or type command to continue

어느 쪽이든, ENTER계속 하려면를 누르면 파일이 나타납니다.

참고 : Vim에서 찾은 내용에 대해 의심이 들면 오류 메시지가 표시되고 "???"가있는 행이 삽입됩니다. 본문에서. 복구하는 동안 오류 메시지가 표시되면 파일에서 "???"를 검색하십시오. 무엇이 잘못되었는지 확인하십시오. 필요한 텍스트를 얻기 위해 잘라내어 붙여 넣기를 원할 수 있습니다.

가장 일반적인 설명은 "??? LINES MISSING"입니다. 이는 Vim이 원본 파일에서 텍스트를 읽을 수 없음을 의미합니다. 시스템이 중단되고 원본 파일의 일부가 저장되지 않은 경우 발생할 수 있습니다.

즉, 나는 그 ???마크를 본 적이 없으므로 이것은 매우 드문 일입니다.


다음으로, 내용을 다른 파일에 저장 (즉, 쓰기) 합니다 (보통 원래 파일 이름 끝에 "2"를 추가합니다).

:w notes2

다음으로이 vim세션을 강제 종료하십시오 .

:q!

다음으로 두 파일을 비교하십시오.

diff notes notes2

경우 diff반환 아무것도 , 그 차이가 없음을 의미하고, 스왑 파일과 두 번째 파일을 모두 제거하는 것이 안전합니다 :

rm .notes.swp notes2

이 시점에서 원본 파일을 열고 문제가없는 것처럼 진행하십시오.

vim notes

경우 diff반환 뭔가 (스왑 파일을 통해) 원본 파일을 의미의 회복, 두 번째 파일에 저장되어있는에, 덕분에 변화가 있었다.

이러한 변경 사항은 두 번째 파일에서 캡처되므로 스왑 파일을 삭제하고 두 번째 파일로 원본 파일을 덮어 쓰는 것이 안전합니다.

rm .notes.swp
remove .notes.swp? y

mv notes2 notes
overwrite notes? (y/n [n]) y

이 시점에서 원본 파일을 열고 문제가없는 것처럼 진행하십시오.

vim notes

이것은 많은 작업처럼 보이지만 워크 플로에 익숙해지면 최대 20 초가 걸립니다.


2
이것이 허용되는 대답이 아니라고 믿을 수 없습니다. 그것은 완벽. +1
David

허용되는 답변보다 훨씬 낫습니다. 이 문제를 해결할 방법이 있었기를 바랍니다!
Michael Durrant

1
메시지가 항상 유용한 것은 아닙니다. 파일을 편집하는 경우 다른 vim 창에서도 파일을 편집하고 있는지 여부가 아니라 편집을 시작한 후 파일을 변경시점 부터 파일이 변경 되었는지 확인합니다. 파일 저장이 인터리브되지 않는 한 두 터미널에서 파일을 여는 것이 좋습니다. Vim은 저장하려고 할 때가 아니라 저장하려고 할 때만 잔소리가 필요합니다.
Ken Simon

불행히도 이것은 질문에 대답하지 않으며, nag 화면을 무시해서는 안된다고 말합니다. 내 시나리오는 이미 vim에서 파일을 열어 놓고 (편집 등을 위해) 파일의 다른 부분을 동시에 나란히보고 싶고 clang_complete가 버퍼 크기를 계속 조정하기 때문에 분할 버퍼를 원하지 않는 것입니다 . 이 경우 실제로 Vim에서 파일을 읽기 전용으로 열고 스왑 파일을 무시하는 방법을 알고 싶습니다.
Lelanthran

@Lelanthranvim -n file_name
664833

19

붙여 넣은 메시지는 다른 Vim 세션에서 여전히 "notes"파일이 열려 있음을 나타냅니다. 다른 곳에서 편집중인 파일을 편집하는 것은 좋은 생각이 아닙니다.

해당 메시지가 틀리면 Vim 세션이 부적절하게 종료 된 방법을 결정하고 앞으로는이를 피해야합니다.

복구에 관해서는, "notes"가 그것과 관련된 Vim .swp 파일보다 최신이기 때문에이 인스턴스에서 문제가 될 수 있지만, 여전히 시도 할 수 있습니다. 먼저 "노트"파일을 백업 위치에 복사하십시오.

" :help recover.txt"을 ( 를) 읽는 것이 좋습니다 .

여기서의 교훈은 당신이이 메시지를 보지 말아야한다는 것이며, 당신은 어딘가에 잘못되었다는 것을 의미합니다. 그것은 아마도 Vim의 잘못이 아닙니다.

이 시점에서 당신은 여전히 절대적으로 결정되는 경우 "넣을 수 있습니다, 당신은 충돌 및 기타 관련 문제를 복구 할 수 있도록 빔 파일을 .swp 만들 수하지 set noswapfile에서" ~/.vimrc.


1
조심해! 나는 VIM으로 엉망인 모든 작업을 거의 잃어 버렸습니다. 시도하기 전에 코드를 복사하십시오.
Squirrl

독자들이 user664833 ( 이 메시지는 실제로 매우 중요합니다 ... ) 의 답변을 검토 할 것을 강력히 권장 합니다.이 답변이 imho에 대한 더 나은 정보와 조언을 제공한다고 생각합니다.
Michael Durrant

11

swapfile을 사용하지 않고 -n을 사용하여 vim 수 있습니다 .

항상 이렇게하려면

alias vim='vim -n' 

.bashrc 또는 .bash_aliases 파일에서

-n 옵션없이 vim을 실행해야하는 경우

\vim

3
항상 스왑 파일없이 실행하는 것은 좋지 않지만 "-n"은 실제로 필요한 것입니다. 일반적으로 스왑 파일을 사용합니다. 그러나 Vim을 diff 도구로 사용할 때이 메시지를 표시하거나 스왑 파일을 방해하지 않는 diff없이 편집중인 파일의 diff를 볼 수 있기를 원합니다.
Agentlien

1
나는이 답변을 좋아합니다-짧고 정확하며 실제 질문에 대답합니다!
Lelanthran


1

.swp 파일이있는 파일을 열 때 성가신 경고를 제거하려면 어떻게해야합니까?

다음의 짧은 메시지 옵션을 사용하십시오 ~/.vimrc.

set shortmess=A

POSIX 모드를 실행할 때의 기본값이기도합니다.

그러나 이렇게하지 마십시오 . 연료 효율을 높이기 위해 자동차의 에어백을 제거하는 것과 같습니다. 장기적으로, 당신은 그 질문에 대답했던 것보다 회복하는데 더 많은 시간을 소비 할 것입니다.


1
단일 사용자 시스템을 가정하면 구성이 그렇게 끔찍한 것은 아닙니다. 터미널 탭이 많이 열려 있고 다른 탭에 이미 묻혀있는 파일을 편집하고 싶을 때가 있습니다. 몇 가지 빠른 편집을 원한다면 괜찮습니다. 나는 다른 정력 창에 자신을 다시 찾을 경우, 장점은 저를 경고 것이 오 그때 내가 그것을 저장하기 전에 파일이 변경되었는지, 나는 빠른을 할 수있는 :e빠른 포함 (일어난 것을보고 u다시 취소 할 것 나는 버퍼에 있었다.) 나는 이미 파일을 열어 두는 것에 비해 낫다는 것보다 훨씬 낫다.
Ken Simon

1

터미널이 vi와의 연결을 예기치 않게 닫았을 때 이런 일이 일어났습니다.

고맙게도 변경 사항이 손실되지 않았습니다.

해당 경고를 제거하고 스왑을 삭제하려면

  1. 프로세스 ID 찾기 보고 process ID: 2251 (still running),이 경우는 2251입니다,
  2. 올바른 ID를 가지고 있는지 확인ps 2251
  3. 사용 하여 프로세스 를 종료kill 2251

그리고 그게 다야.

스왑 파일은 사용자를 보호하기 위해 존재하므로 완전히 비활성화하지 않아야합니다.


그러나 vi(m)프로세스 가 없다면 어떻게 될까요?
Scott

-2

이 문제를 간단한 세 단계로 해결했습니다.

1 :) 파일이 존재하는 곳에서 "ls -la"를 실행하여 .swp 파일을 볼 수 있도록하십시오.

2 :) 이제 "rm -i * .swp"즉, 디렉토리에서 ".swp"파일을 제거하십시오.

3 :) 이제 ".swp"파일이 제거되었는지 확인하십시오.

4 :) 이제 그 경고를 누리십시오.


3
세계에서 왜 rm -rf파일 제거 를 제안 하시겠습니까? 나는 -rf더 현명한 것으로 교체-i
Nifle
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.