swp 파일에 저장되지 않은 변경 사항이 포함되어 있는지 확인하는 방법은 무엇입니까?


11

gvim (v.7.4.488)을 사용하여 소스 코드를 편집 할 때 vc를 약간 변경하려고합니다 (Ubuntu Linux의 명령 줄에서 git 2.1.4를 사용하고 있습니다).

git --status

내가 변경 한 파일을 보여줍니다. 그러나 .*.swp현재 표시된 버퍼 의 vim도 표시합니다 (파일에 저장되지 않은 변경 사항이 포함되어 있고 편집 된 파일이 .*.swp-file 과 동일한 경우 ). 물론 git은 이러한 파일을 무시 하거나 vim이 스왑 파일을 다른 위치에 저장할 수 있습니다 ( vim.wikia 또는 이 질문은 stackoverflow 참조 ). 그러나 저장되지 않은 변경 사항이 포함 .*.swp되어 git --status있을 때 -files가 표시 되는 것을 좋아합니다 . 왜냐하면 내가 생각하는 것과 다른 상태로 파일을 커밋하고 있다는 신호이기 때문입니다.

저장된 파일이 -file 과 같을 때 나타나는 .*.swp-files 의 오탐을 피하면서 어떻게 커밋 할 파일이 vim으로 편집하는 것과 다른 상태인지 볼 수 있습니까?git --status.*.swp

  • .*.swp디스크의 파일과 vim의 파일이 다른 경우 -files 만 가질 수 있습니까?
  • 저장되지 않은 파일을 탐지하는 다른 방법이 있습니까?

@elyashiv@VanLaser 의 주석을 결합하면 스왑 파일이 저장되지 않은 파일을 암시하는지 여부를 감지하는 것보다 간단한 방법이됩니다.

  1. git이. *. sw [po] 파일을 무시하지 않도록하십시오.
  2. 커밋 할 때 경우, git --status알 수있는 .*.sw[po]-files는 할 :waVI에; 과,
  3. 추가하고 커밋합니다.

1
:wa저장되지 않은 파일이 없는지 확인하는 데 사용할 수 있습니다 .
elyashiv

2
정말, 당신의 모든 파일을 저장하기 전에 훨씬 "소리"입니다 git commit...
VanLaser

답변:


8

vim -r명령 행에 현재 디렉토리 및 임시 디렉토리의 모든 스왑 파일과 저장되지 않은 변경 사항이 포함되어 있는지 여부가 나열됩니다. 라고 표시된 줄을 찾으십시오 modified: no/YES.

Vim에 다른 디렉토리를 찾도록 지시하는 방법을 모르므로 스왑 파일이 포함 된 각 디렉토리로 변경하고를 실행해야 vim -r합니다. 의 출력을 구문 분석 git status하거나 사용한 스크립트를 생성 find -name '.*.sw[po]'한 다음 vim -r각 디렉토리에서 실행 하여 모든 스왑 파일을 저장하지 않은 변경 사항으로 표시 할 수 있습니다.

( 스왑 파일이 이미있는 파일을 편집 할 때 파일과 함께 파일이 생성 되기 때문에을 .*.sw[po]대신 사용 합니다. 기존 스왑 파일이 두 개있는 파일을 편집하면 파일을 만들 수도 있습니다 . 나는 야생에서 하나를 본 적이 있습니다. 만약 당신이 정말로 편집증이라면, 또는을 사용할 수 있습니다 .).*.swp.swo.swp.swn.*.sw[a-p].*.sw?

참조 :help -r온 (조금) 자세한 내용은 -r옵션 또는 :help recover.txt복구 및 스왑 파일 이름에 대한 자세한 내용은.


1
Vim의 스왑 파일은 숨겨진 파일 ( .파일 이름으로 이어져 있음 )이므로 올바른 패턴이됩니다 .*.sw[a-p](병리학 적 경우 실제로 실제로 모든 길을 찾을 수 있음 .foo.saa). 플래시 파일과 일치하는 것을 배제해야합니다. 일반적으로 숨겨진 파일 일 것입니다.
jamessan

@jamessan .쉘 글로브에는 선행 이 필요하지만에 *.swp대한 인수로 작동합니다 find. 그러나 최고의 .것은 일을 더 단순하게 만듭니다. 감사!
Lithis

8
  • .*.swp디스크의 파일과 vim의 파일이 다른 경우 -files 만 가질 수 있습니까?

예. 아래 스 니펫 ( tpope의 vimrc 에서 수정)은 수정되지 않은 버퍼에 대한 스왑 파일을 비활성화하므로 스왑 파일은 수정 된 파일에 대해서만 존재합니다.

autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
  \ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif

주의 사항 : 스왑 파일은 버퍼가 수정 된 경우에만 존재하므로 권고 잠금으로 스왑 파일을 사용하지 못하게됩니다. 버퍼가 수정되지 않은 경우 다른 Vim은 이미 열려 있음을 알리지 않고 편집을 시작할 수 있습니다. 두 번째 Vim이 첫 번째 Vim이 더 많은 변경을 수행하기 전에 저장하면 사용자가 저장을 시도하거나 파일이 수정되었는지 확인하기 위해 Vim을 트리거 할 때까지 통지되지 않습니다.

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