Vim 使いの皆さんは、 Vim のファイルを保存する方法をご存知だろうか?
そうだ、 :w<CR>
のことだ。
……皆さん、お気づきだろうか。
たかがファイルを保存するのに、
なんと、
三つもキーをタイプしている!!!
あまりの衝撃に、 # を使って強調してしまった。
そして、私みたいな US キーボード使いなら Shift ; w <CR>
だ。
四つに跳ね上がっている!!!
意味がわからない。
日本は法治国家ではなかったのか(錯乱
信じられないほどの苦行だ。
プログラマーの三大美徳である「怠惰」をなんだと思ってるんだ!! と激昂した私は、オートセーブをしたくてたまらなくなった。
この記事で達成すること
vim からフォーカスを外した場合、自動でセーブする。
もう一つのアプローチとしては、一定時間入力しなければセーブするというものがあるが、ファイルセーブ時に何かする機能が全滅するのでやめておく。
手順
長く険しい道のりだが、最後までやり遂げてくれ。
neovim, gui vim を使っていない者はここから
neovim 使いはこの項目をスキップすべし。
gui 版の vim もスキップして問題ないはず(確かめてない)。
いくつかのターミナル(どれだよ)を除いて vim はフォーカス状態を感知できないらしい。
mac 使いは以下の二つを実行すべし。
windows linux 使いは自分で頑張れ。
- iterm2 を使う
- sjl/vitality.vimを入れる
これは iterm2 tmux vim 三者の連携をいい感じにしてくれるプラグインで、 vim がフォーカス状態を感知できるようになる。
そして下へと続く。
neovim, gui vim を使っている者はここから始める
$ echo 'autocmd FocusLost * silent! wa' >> ~/.vimrc
tmux を使わない場合はここで終わり。
おめでとう。
vimrc に一行文字列を追加するという危険な旅を終えたあなたには、それ相応の見返りがあったはずだ。
このやり方は、ファイルに紐づいてないバッファーや、セーブできないファイルがあった時、スキップする。
もちろん、 vim を終了する時にはちゃんと警告が出るので、セーブを終えないまま vim を退出するようなことにはならないが、ちゃんとエラーを表示してほしい人はこっちを使うといいだろう。
$ echo 'autocmd FocusLost * wa' >> ~/.vimrc
これで OK 。
Tmux を使っている
しかし、 tmux 使いはまだだ。
tmux の中の vim はフォーカス状態を感知することが出来ない。
険しい道のりが続く。
$ echo 'set -g focus-events on' >> ~/.tmux.conf
終わりである。
ターミナルからフォーカスを外した時はもちろん、 tmux のウィンドウを移動した時にもセーブされる。
果てしなく長い手順の果てに、 tmux 使いもきっとオートセーブを手に入れたことだろう。
少なくとも Mac デフォルトのターミナルと iTerm2 で確認したところ、問題なく動いた。
やったね。
P.S. :w<CR>
を筋肉が覚えててやめられない。