はじめに
スワップファイル(.swpとか)って普段あまり気になりませんが、
PCやターミナルが不意に強制終了などするとそのまま.swp
が残ってしまうときありますよね。
消すにもいろんなディレクトリにちらばって残っていたり
探すのもめんどくさいしでいっその事でなきゃいいのにとも思いますが、
クラッシュ前の変更を記録してくれたりするので出さなくするにもなーと思います。
そんなときのメモ。
内容自体は今更な内容ですw
アジェンダ
1. スワップファイル(.swp)とは
まずは.swpファイルについて軽く触れておきます。
swpファイルはスワップファイルと呼ばれています。
スワップファイルはアプリケーションのクラッシュに備えて、 vimエディタでの編集開始時に作成され、編集後に削除される編集情報の記録ファイルです。
スワップファイルを使用していれば、vimエディタがシステムエラーで強制終了しても、 保存前のデータが失われずに済みことがあります。
- 参考サイトからまんま引用させて頂きます。thx!
vimエディタが(勝手に)作成する、一見、不要に見えるファイルが何をしているか
2. スワップファイル(.swp)できたとき
.swpがあるファイルをvimで開くとこんな表示がされます。
E325: ATTENTION Found a swap file by the name ".swp_sample.txt.swp" owned by: hoge dated: Mon Jan 23 12:09:39 2017 file name: ~hoge/swp/swp_sample.txt modified: no user name: hoge host name: O-04850-MAC.local process ID: 8563 While opening file "swp_sample.txt" dated: Mon Jan 23 12:07:24 2017 (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 swp_sample.txt" to recover the changes (see ":help recovery"). If you did this already, delete the swap file ".swp_sample.txt.swp" to avoid this message. Swap file ".swp_sample.txt.swp" already exists! [O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
書いてある通りですが、それぞのキーを押す事で次の動作を決める事ができます。
キー | オプション名 | 説明 |
---|---|---|
O | 読み込み専用 | 読み込み専用でファイルを開く |
E | 編集 | .swpを無視してオリジナルのファイルに対して編集する。スワップファイルは新たに別名で作成される |
R | 復活 | オリジナルのファイルと.swpファイルを使用してクラッシュ前の状態を復元する |
D | 削除 | swapファイルを削除してオリジナルのファイルの編集をする |
Q | 終了 | ファイルを開くのをやめる |
A | 中止 | 現在作業中の処理を停止する。連続でファイルを開いている場合などに中止する |
3. スワップファイル(.swp)を出さなくする設定
スワップファイル(.swp)を出さなくするには
~/.vimrc
に設定を足します。
set noswapfile
有効にする(出すとき)はこっちを設定します。
set swapfile
4. スワップファイル(.swp)の出力場所を設定する
出力する場所を変更するために
まずはmkdir ~/.vim/tmp
で.swp
をおくディレクトリを作成してから
以下の設定を~/.vimrc
に追加します。
set directory=~/.vim/tmp
5. スワップファイル(.swp)の作り方
出さなくするにせよ、出力場所を変えるにせよ動作確認がしたいものです。
.swp
ファイルは強制終了時などに残りますが、vimを開いた状態でターミナルのxボタン
や閉じる
をしても残らなかったりします。
なのでkill
することで強制終了する事で.swp
を残します。
# vimで適当なファイルを開いたまま別のターミナルでls $ ls -l total 32 drwxr-xr-x 4 hoge hoge 136 1 24 23:55 . drwxr-xr-x 4 hoge hoge 136 1 24 17:27 .. -rw-r--r-- 1 hoge hoge 12288 1 24 23:55 .swp_sample.txt.swp -rw-r--r-- 1 hoge hoge 9 1 23 12:07 swp_sample.txt # killするプロセスを知る $ pstree ~ 省略 ~ | |-+= 00592 hoge /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_45067 | | |-+= 27293 root login -pfl hoge /bin/bash -c exec -la bash /bin/bash | | | \-+= 27294 hoge -bash | | | \--= 34214 hoge vim swp_sample.txt ~ 省略 ~ # この場合は`08663`をkill $ kill -9 34214 # vimを開いているターミナルをプロセスが終了しているはず # と、同時に.swpも残りっぱなしになる
おわり
今更な内容でも書く事を大事にしようと思います\(^o^)/