Neovim swap 파일 안전하게 정리하기
복구 후 swap이 자동 삭제되지 않아 경고가 반복되는 문제. 파일명 규칙과 자동 판정 휴리스틱.
Neovim swap 파일 안전하게 정리하기
nvim -r 는 swap 내용을 복구만 하고 swap 파일은 자동 삭제하지 않는다. 그리고 같은 원본에 swap 이 여러 개 쌓일 수 있어서 (.swp, .swo, .swn, …) 하나만 지워도 경고가 계속 뜬다.
swap 파일명 → 원본 경로 규칙
Neovim 은 / 를 % 로 치환해 swap 파일명을 만든다. 선두 % 가 leading / 역할:
1
%Users%alice%.pgpass.swp → /Users/alice/.pgpass
쉘에서 역변환:
1
2
name="${name%.sw?}" # 확장자 제거
echo "${name//%//}" # % → /
복구 후 정리 순서
복구만 하고 swap 을 안 지우면 다음 번에도 경고가 뜬다. 같은 원본에 swap 이 6 개 쌓여 있으면 .swl → .swm → … 순서로 계속 경고.
1
2
3
nvim -r ~/.pgpass # 복구
# :w 저장 후 :q
rm ~/.local/share/nvim/swap/%Users%alice%.pgpass.sw* # 복구 내용을 확인한 뒤 제거
자동 삭제하지 말고 판단 자료로만 쓸 것
- 사용 중:
lsof -t -- "$swap"으로 감지되면 삭제 금지 - 원본보다 swap 이 오래됨: 잔재일 가능성이 있지만 미저장 내용이 없다고 보장하지 않음
- 원본보다 swap 이 최신: 미저장 변경 가능성이 높으므로 보존
- 원본 파일 없음: 삭제된 파일의 미저장 내용일 수 있으므로 복구 확인
bash [[ "$swap" -nt "$original" ]]와 lsof는 판단 자료일 뿐이다. mtime이나 프로세스 검사만으로 자동 삭제하지 말고 nvim -r 또는 :recover로 내용을 확인한 뒤 명시적으로 지운다. 원본 경로에 %가 들어가면 단순 치환으로 정확히 역변환할 수도 없다.
인터랙티브 프롬프트 패턴
y / N / a (이후 전부 자동 삭제) 컨벤션. read 가 stdin 이 파이프된 환경에서도 동작하려면 /dev/tty 명시:
1
read -rp "삭제? (y/N/a=이후 전부) " ans </dev/tty
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.