VIMスワップファイルのベストプラクティス?


14

接続を失うことでvimでセッションを終了するたびに、むしろドレッドでいっぱいになります(それでもvimを使用し続けます...私はマゾヒストである必要があります)。ファイルが私の作品を破壊するのを待っています。vimスワップファイルを操作するためのベストプラクティスは何ですか?最新のものを選んでいますか?ファイルが期待どおりに機能する場合は、スワップファイルを削除するだけですか?どうやってそれらを取り除くのですか?


5
スワップファイルは、作業を保護するためにあります。GNUスクリーンの使用を検討してください。

1
機能をオフにしたくありません。面倒ですが、あなたが役に立つと述べています。
leeand00

1
私はちょうどそれを適切に使用する方法を知りたいです。
leeand00

2
@DrEval私はtmuxを使用します
leeand00

2
tmuxを使用する場合、接続が失われることを心配する必要はありません。再接続するときにセッションに再接続するだけです。mosh@ChristianBrabandtRecoverプラグインにも興味があるかもしれません。
リッチ

回答:


22

パニックにならないでください!

vim ユーザーが自分で書き込むまで変更を書き込まないため、ファイルの回復は常に安全です。そのため、スワップファイルから回復し、保存せずに閉じても何も変わりません。

スワップファイルを整理します。

vimを入手して、すべてのスワップファイルを同じ場所に配置して、どこにあるかを常に把握できるようにします。

set directory^=$HOME/.vim/swap//

またはあなたが好むところはどこでも。//ファイル名の最後で使用すると、vimはスワップファイル名に絶対ファイルパスを使用するため、名前の衝突が発生しません。ディレクトリーが存在することを確認してください。存在しない場合、vimはそれを使用しません(作成しません)。

注:これは環境変数でのみ機能します。vimscript変数を使用する場合は、:execute魔法を使用する必要があります。

execute "set directory^=".my_vim_home_var."/swap//"

違いを比較します。

Vimのヘルプは、この状況で使用する非常に便利なコマンドを提案しています:DiffOrig。これはデフォルトのvimコマンドではないため、実装を:h :DiffOrigvimrcにコピーします。($VIMRUNTIME/defaults.vimvim8を使用している場合も同様です)。これで、ファイルを回復し、DiffOrigを実行するだけで、変更されていないバージョンから変更された内容のvimdiffを取得できます。

複数のスワップファイルの内容を比較する場合は、異なるスワップファイルごとにファイルを回復し、結果を一時ファイルに書き込みます。ファイルをロードして:diffthis各ファイルで実行し、必要な変更を加え、元のファイルに書き戻し、一時ファイルとスワップファイルを削除します。

便利なコマンド:

:swapname:vimが現在のバッファのスワップファイルに使用している名前を取得します(:h :swapname:recover:vimを起動してR:h :recover)を押したときと同じように、選択したファイルを回復します

ヘルプをご覧ください。

Vimには、回復に関するユーザーマニュアルのセクション全体があり:usr_11.txt
ます。スワップファイルに関するVimのリファレンスヘルプ::h swap-fileh recovery
ディレクトリオプションに関するヘルプ(スワップファイルの場所を設定するため)::h 'directory'

編集: @B Layerのコメントで指摘されているように、ディレクトリ設定の例を変更


複数のスワップファイルが作成された場合はどうですか?多くの多くの接続が切断されたためですか?
leeand00

1
「相違点の違い」の2番目の段落で言及しました。差分を使用して、どの変更を保持するかを決定したら、すべての一時ファイルと作成した古いスワップファイルを削除します(すべてのスワップファイルの場所がわかりました)。
フレミングフレミング

1
参考までに、使用する必要はありませんexec... 初期化された環境変数であるset directory^=$HOME/.vim/swap//限り正常に動作し$HOMEます。をご覧ください:h expand-env。またで動作しdictionaryundodir、およびbackupdir少数を示すために。
Bレイヤー

そのことを思い出してくれてありがとう!代わりに、設定でvimscript変数を使用します。したがって、実行変数は忘れて、環境変数はそれを必要としません。それを考えると、おそらくvimを使用して代わりに環境変数を設定する必要があります。
フレミングフレミング

2

個人的に、私はスワップファイルとバックアップファイルをオフにしました。それはどこでもスワップファイルとバックアップファイルを作成する傾向があり、頻繁に競合を引き起こすからです。Vimの永続的な取り消しは、はるかに信頼性が高く、エラーがありません。

現在、Vimには永続的な取り消しがあります。これは、よりきめの細かいバックアップ方法です。を押すたびEscに、ファイルの現在の状態がキャプチャされます。

:undolist、またはgundoundo-treeのようなプラグインを使用して、取り消し履歴を閲覧できます。

この方法でvimを使用するには:

  • 各ファイルの履歴を編集するディレクトリを作成します
  • そのディレクトリを使用するようにvimに指示します
  • 永続的な取り消しを有効にする

シェル内:

mkdir ~/.vim/undodir

Vimで

set undodir=~/.vim/undodir
set undofile

スワップファイルをオフにするには: :set noswapfile


1
この答えには、かなり大きな問題がいくつかあります。1.永続的なアンドゥは、スワップファイルに関する別の問題を解決します('writebackup'さらに別の問題に対処します)。永続的な取り消しを有効にしても、コンピューターがクラッシュした場合には役に立ちません。他の理由(現代のOSの安定性、UPSの存在)のためにスワップファイルは不要であると主張することができますが、この回答ではそうしていません。2.設定'undodir' 永続的な取り消しを有効にしません'undofile'これを設定する必要があります
リッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.