6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vim のファイルセーブは異常だからやめたい

Last updated at Posted at 2018-08-30

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> を筋肉が覚えててやめられない。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?