元に戻すファイルを使用するにはどうすればよいですか?


36

vim.orgの最後のニュース項目では、「取り消しファイル」を使用して履歴を保存し、再起動後でも変更を取り消す方法について説明しています。

私が自分自身を使って楽しんでいる機能は、先週末見つけたように、多くのユーザーには知られていません。Vimでは、必要な数のレベルで元に戻すだけでなく、ファイルに元に戻す情報を保存することもできます。したがって、Vimを終了し、コンピューターを再起動しても、行った変更を元に戻すことができます。「取り消しファイル」のヘルプを参照してください。(Bram Moolenaar)

この機能を有効にして使用するにはどうすればよいですか?


2
ブラムはおそらくこのイベント
カートPfeifle

回答:


37

最も単純なバージョンは~/.vim/undo-dir/次のとおりです。ディレクトリを作成し、以下を以下に追加します.vimrc

set undodir=~/.vim/undo-dir
set undofile

しかし、それは完璧ではないので、読み進めることをお勧めします。私自身から.vimrc

" Let's save undo info!
if !isdirectory($HOME."/.vim")
    call mkdir($HOME."/.vim", "", 0770)
endif
if !isdirectory($HOME."/.vim/undo-dir")
    call mkdir($HOME."/.vim/undo-dir", "", 0700)
endif
set undodir=~/.vim/undo-dir
set undofile

ランダムなディレクトリを元に戻すファイルで乱雑にしないことを好みます。そこで、undodirオプションを設定します。このオプションは、すべてを1つの取り消しディレクトリに入れます。それは1つの問題を残します。私は怠け者であり、すべてのマシンでそのディレクトリを作成する気はありません(バージョン管理システムを使用して、マシン.vimrc間で同期します)。ありがたいことに、ディレクトリが存在しない場合はVimでディレクトリをチェックして作成するのは簡単です。

0700元に戻すディレクトリのモードにも注意してください(所有者には完全な権限であり、他の人には権限がありません)。編集したファイル、いつ、などを非公開にする必要があります。そして、これは私だけがアクセスできるディレクトリであるため、他の誰かがそこにシンボリックリンクを置くことを心配する必要はありません。

最後に、システムの一時ディレクトリではなく、システムの一時ファイルのクリーンアップポリシーの対象ではありません。多くの場合、それは1週間ほどでかなり短いです。しかし、永久に成長しないようにするために、以下に以下を追加しますcrontab

# m h  dom mon dow   command
 43 00 *   *   3     find /home/anthony/.vim/undo-dir -type f -mtime +90 -delete

したがって、90日間変更されていない場合、それらは削除されます。(正直なところ、それらはそれほど大きくはないので、ディスクがどれだけ安いかを簡単に永久に残すことができます。しかし、マシンが危険にさらされた場合は、自分のプライバシーも考慮してください。)


詳細な回答@derobertをありがとう!私はこれが古い質問であることを知っていますが、古いvim undoファイルを削除するvimscriptの方法を考え出そうとしています(vi.stackexchange.com/questions/16053/…)。そうすればもっときれいになると思いますが、簡単ではないことを証明しています。vimscriptを使用して古いvimファイルを削除することを考えたことがありますか?そうでない場合でも、vimscriptでcrontabを使用しますか?
ローガン

1
@Logan vimスクリプトの使用は、vimの実行中にのみ機能します。また、複数のvimが実行されている場合はどうなりますか?そのcron行は単純で、これらの問題に悩まされることはなく、明らかに正しい
...-derobert

mkdir()関数は"p"{path}パラメータのオプションを使用した複数のディレクトリ構造の作成をサポートしているようです。したがって、上記のスクリプトは少し単純化できます。使い方call mkdir($HOME."/.vim/undo-dir", "p", 0700)はVim 7.4.160、少なくとも私にとっては作品を。
jdhao
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.