vimで元のファイルのバックアップを作成することは可能ですか?


0

vimを離れて手動でコピーすることなく、新しいバッファをファイルに書き込む前に元のファイルのコピーを作成することは可能ですか?

回答:


1

はい; 私はこれを持っています.vimrc

set backup

function! BackupDir()
   if has('win32') || has('win64')
      let l:backupdir=$VIM.'/backup/'.
               \substitute(expand('%:p:h'), '\:', '~', '')
   else
      let l:backupdir=$HOME.'/.vim/backup/'.
               \substitute(expand('%:p:h'), '^'.$HOME, '~', '')
   endif

   if !isdirectory(l:backupdir)
      call mkdir(l:backupdir, 'p', 0700)
   endif

   let &backupdir=l:backupdir
   let &backupext=strftime('~%Y-%m-%d_%H-%M-%S~')
endfunction

autocmd! bufwritepre * call BackupDir()

Vimは、ファイルを保存するたびに一意の名前のバックアップファイルを保存します。バックアップは~/.vim/backup(Linuxの場合)、元のファイルのディレクトリ階層を複製するディレクトリ階層に保存されます。バックアップファイルが必要なときに簡単に見つけることができます。私はこれを一度設定して忘れました。必要になることはめったにありません(通常、すべての履歴はgitに保存されるため)が、必要な場合、それは単なる命の恩人です。

(ちなみに、現在ののサイズを確認しただけで、~/.vim/backupこのシステムで2年間作業した後は1.3 GBになります。おそらく、すぐにクリーンアップする必要があります)


すべてのファイルをバックアップするのではなく、vimから元のファイルのバックアップを取るコマンドを書きたいだけです。
キャスリーン

1

あなたはあなたがしようとしているVimのファイルにすでにいくつかの変更を加えているが、:writeまだディスク上にある元のファイルをバックアップしたいということですか?

Vimから直接外部シェルコマンドを起動できます。Vimの:help cmdline-specialシンボルは現在のファイル名のハードコーディングを回避するため、これを簡単にカスタムマッピングまたはコマンドに変換できます。

:!cp % %.bak

別の方法として、Vimのアンドゥスタックを使用することもできます。最初の:earlier 1fコマンドで元のファイルを一時的に復元し:write %.bak、次に:later 1f

完全なバックアップソリューションを探している場合は、writebackupVersionControlプラグインにも次のようなコマンドがあります:WriteBackupOfSavedOriginal


まさに-それが私の問題の確実な解決策です。
キャスリーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.