logo
Published on

Vimでタイプごとやミリ秒ごとに自動保存してくれるvim-auto-saveが便利

Authors

多くのプログラマーに長年愛用されているVimコマンドラインテキストエディタにおいて、保存(:w)をせずにタイピングごとやミリ秒ごとにファイルを自動保存してくれるvim-auto-saveが便利だったので紹介します。

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_05373428-069b-4041-9743-2cd614e3b37b.gif

ファイルをダイレクトに編集するっていうか、ライブ編集っていうか、保存をしなくても文字を打つたびに、または数ミリ秒ごとに自動で保存してくれたらいいなと思っていました。vimプラグイン入れるのはじめてだったので少し手間取りましたが使い方はめっちゃシンプルです。

インストール ( The Ultimate vimrc )

僕はThe Ultimate vimrcというvim初心者向けのいろいろ便利機能を混ぜて作った使いやすいvim環境をつくるやつを使っています。

amix/vimrc: The ultimate Vim configuration: vimrc

vimプラグインマネージャーはVundle、vim-plug、pathogenの順番で人気があるのですが、The Ultimate vimrcはpathogenにしか対応していないようです。

tpope/vim-pathogen: pathogen.vim: manage your runtimepath GitHub - amix/vimrc: The ultimate Vim configuration: vimrc

ので、pathogenでThe Ultimate vimrcにvim-auto-saveをインストールするには、以下コマンドとなります。

git clone https://github.com/907th/vim-auto-save ~/.vim_runtime/my_plugins/vim-auto-save
vim-auto-save - Vim Awesome 907th/vim-auto-save: Automatically save changes to disk in Vim

インストール ( The Ultimate vimrc 以外 )

vim-auto-save - Vim Awesome

使ってみる

デフォルトでは、insertモードを離れたとき、normalモードでコマンドを動かした結果テキストが変化したとき、だけに適用されるようになっています。

Using InsertLeave and TextChanged only, the default, will save on every change in normal mode and every time you leave insert mode.

let g:auto_save_events = ["InsertLeave", "TextChanged"]

:h autocommand-eventsにて全てのイベントのリファレンスが見れます。一応全部目通しました。vimすごい。

で、使えそうなイベントは以下あたりかなと。

TextChangedI ... insertモードにてテキストが変化したら発火 CursorHoldI ... insertモードにて数ミリ秒ごとに発火 CursorMovedI ... insertモードにてカーソルが動いたら発火

ので、僕は以下を.vimrcにおいています。

let g:auto_save_events = ["InsertLeave", "TextChanged", "TextChangedI"]

これを有効化するには、normalモードにて:AutoSaveToggleコマンドを実行して有効性をトグルします。

上記の設定の状態で実際に使ってみたのが以下gif。

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_05373428-069b-4041-9743-2cd614e3b37b.gif