Home > Vim Hacks > Hack #162: Vimを終了しても undo 履歴を復元する

Hack #162: Vimを終了しても undo 履歴を復元する

Hack #8: 作業の履歴を辿るでも紹介したように Vim には編集履歴を辿る機能が充実していますが、Vim を終了したりファイルを開きなおしたりするとこの undo 履歴は消えてしまいます。

undo-persistence

現在開発中の Vim 7.3 から、新しく undo-persistence (:help undo-persistence) と言う機能が追加されました。これを使うと undo の情報をファイルに保存し、Vim を終了しても次に起動したときに undo の履歴を復元してくれるようになります。

設定

'undodir'

まず、undo 履歴を保存するファイルが作成されるディレクトリを 'undodir' オプションに設定します。これにはディレクトリをカンマ区切りのリストで指定します。 ディレクトリの指定に "." を使うと、対象ファイルのあるディレクトリを指します。デフォルトはこれです。

指定したディレクトリの中で、最初に存在したディレクトリに undo 履歴のファイルが保存されます。また、復元する際は最初に見付かったファイルから履歴を復元します。

例えば、ファイルと同じディレクトリに .vimundo と言うディレクトリがあったらそのディレクトリへ、なければ ~/.vimundo へ保存するには、以下のように設定します。

set undodir=./.vimundo,~/.vimundo

'undofile'

これはバッファローカルなオプションで、これが on のバッファはバッファの保存時に undo 履歴をファイルに保存します。また、読み込み時に undo 履歴を復元します。

全てのファイルで有効にしたい場合は単に :set undofile とすれば良いでしょう。特定のファイル、例えばホームディレクトリ以下のファイルのみで設定したい場合は以下のようにします。

augroup vimrc-undofile
  autocmd!
  autocmd BufReadPre ~/* setlocal undofile
augroup END

+persistent_undo

これらの機能は +persistent_undo がないと利用できないので、if で囲っておくと良いでしょう。

if has('persistent_undo')
  set undodir=./.vimundo,~/.vimundo
  augroup vimrc-undofile
    autocmd!
    autocmd BufReadPre ~/* setlocal undofile
  augroup END
endif

注意点

undo 履歴ファイルは 'undodir' で指定したディレクトリが "." 以外だった場合は対象のディレクトリに、フルパスのパスの区切りを "%" で置き換えたファイル名で保存されます。つまり、ファイルを移動すると履歴ファイルの名前を手動で変更しない限り undo 履歴は失われます。

また、この機能は現在開発中の Vim に含まれているものです。利用する場合は自己責任で利用してください。

thinca
このエントリーをはてなブックマークに追加
はてなブックマーク - Hack #162: Vimを終了しても undo 履歴を復元する
Share on Facebook
Post to Google Buzz
Bookmark this on Google Bookmarks
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://vim-users.jp/2010/07/hack162/trackback/
Listed below are links to weblogs that reference
Hack #162: Vimを終了しても undo 履歴を復元する from Vim-users.jp

Home > Vim Hacks > Hack #162: Vimを終了しても undo 履歴を復元する

Search
Feeds
Links
  • 公式
  • 勉強会
  • 情報
  • コミュニティ
  • Meta
    Etc
    Creative Commons License
    This blog is licensed under a Creative Commons License.

    Return to page top