tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【vim】スワップファイル(.swp)について - 出さなくする/出力場所を設定する

はじめに

スワップファイル(.swpとか)って普段あまり気になりませんが、
PCやターミナルが不意に強制終了などするとそのまま.swpが残ってしまうときありますよね。

消すにもいろんなディレクトリにちらばって残っていたり
探すのもめんどくさいしでいっその事でなきゃいいのにとも思いますが、
クラッシュ前の変更を記録してくれたりするので出さなくするにもなーと思います。

そんなときのメモ。
内容自体は今更な内容ですw

アジェンダ

  1. スワップファイル(.swp)とは
  2. スワップファイル(.swp)できたとき
  3. スワップファイル(.swp)を出さなくする設定
  4. スワップファイル(.swp)の出力場所を設定する
  5. スワップファイル(.swp)の作り方

1. スワップファイル(.swp)とは

まずは.swpファイルについて軽く触れておきます。

swpファイルはスワップファイルと呼ばれています。
スワップファイルはアプリケーションのクラッシュに備えて、 vimエディタでの編集開始時に作成され、編集後に削除される編集情報の記録ファイルです。
スワップファイルを使用していれば、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^)/