Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>