Vimの自動保存ファイルを作成することはできますか?


32

一部のワードプロセッサとテキストエディタは、編集中のファイルを時々自動保存します。これは、厄介なクラッシュなどからの生存に非常に便利です。

特定の間隔の後にVimにファイルを自動保存させる方法はありますか?

回答:


30

組み込みオプションはありませんが、:help 'autosave'(todo.txtで)そのようなオプションで何ができるかについての説明を指します。

これを実装する1つの方法は、CursorHoldautocommandイベントを使用することです。このイベントは、ユーザーがキーを'updatetime'ミリ秒押していないときにトリガーされます。

autocmd CursorHold * update

この:updateコマンドは、変更された場合にのみバッファーを保存します。挿入モードがアクティブなときにこれを実行したい場合はCursorHoldI、イベントリストに追加できます。

autocmd CursorHold,CursorHoldI * update

別の選択肢は、'autowrite'外部コマンドを実行する前にバッファーを保存するオプション(実行前に保存するのに便利:make)または別のバッファーに切り替えるオプションです。


動作していることをどのように確認できますか?
ニロン

@nilon:wを自分で押したかのように、保存されているステータスバーに印刷する必要があります。
MaudPieTheRocktorate

12

Vimには自動保存機能がありますが、「リカバリ」ファイルに保存されます。

ドキュメントを編集するとき、たとえば、MyFile.txtvimは取り消しファイルを作成します.MyFile.txt.swp。システムがクラッシュした場合、またはセッションが終了した場合は、次のように入力して再接続し、中断したところから回復できます。

vim -r MyFile.txt

これにより、ファイルが編集用に開かれ、最後に行った変更が復元されます。

その後、回復したバージョンを通常の方法で保存でき:wます。

残念ながら、vimを終了すると、そのまま残り.MyFile.txt.swpます。手動で削除する必要があります。

rm .MyFile.txt.swp

参照「リカバリ」マン・ページ第11章を


1
Vimを適切に終了すると(つまり、:wqor :q!またはZZorなど)、スワップファイルは自動的に削除されます。
ドアノブ

4
@Doorknobは、回復後に終了するときではありません...
;

8

タイマーのVim 8機能を使用して定期的にバッファーを保存するプラグインvim-autosaveを作成しました。


うわー、Vim 8プラグインが既にリリースされています。クリスチャン、すてきだね!
thameera

ありがとう、クリスチャン。これは有望に見えます。プラグインが新規/未保存ファイルをサポートしているかどうか疑問に思います。プラグインのドキュメントに答えが見つかりません。私のコンピューターは昨夜再起動することを決定し、新しいバッファーに関するいくつかの簡単なメモがありました。Vimはswpファイルを作成または保存しませんでした。
JAponte

いいえ、現在、新規/未保存のファイルはサポートしていません。それが必要な場合は、先に進みましょう。
クリスチャンブラバンド

2

Vimは、フォーカスが失われるたびにすべてを保存します。

autocmd FocusLost <your-patterns-here> silent! wall

私のパターンはかなり長く、いくつかのautocmdでそれらを使用していますが、完全を期すために、これは次のようになります。

if exists(':keeppatterns')
    let s:keeppatterns = 'keeppatterns '
else
    let s:keeppatterns = ''
endif

augroup AutoSaveGroup
    " :help file-pattern has some info,
    " but some of it is is buried in the PATTERNS section of usr_40.txt
    let s:autoPattern = "*.{c,h,[ch]pp,[acjt]s,inl,cg,cgfx,fx,py,bat,cmd,jam,vim,yml,yaml,vsprops,erb,rb,html,htm},SCons*,*vimrc"

    autocmd!
    execute "autocmd FocusLost"     s:autoPattern   "silent! wall"
    execute "autocmd BufWritePre"   s:autoPattern   s:keeppatterns . 'call FixFormatting(expand("<afile>"))'

    execute "autocmd FileChangedRO" s:autoPattern "silent !p4 edit %:p"
    execute "autocmd FileChangedRO" s:autoPattern "write!"

    autocmd FocusLost   *.txt   silent! wall
augroup END

1

他の人が示しているように、vimには元のファイルがある場所に作成されるスワップファイル(.swp)がありますが、.vimrcファイルでは、.swpディレクトリを設定できます。

でディレクトリを作成し、mkdirその場所に.vimrcを設定する必要があります。

set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp

1

VIM-ワークスペースプラグインは、あなたのニーズに合わせてかなりカスタマイズ自動保存機能があります。デフォルトでは、ワークスペースセッションでの自動保存が有効になります(その主な機能)が、探しているだけの場合は常に自動保存するように設定できます(let g:workspace_autosave_always = 1)。


1

テキストが変更されるたびにバッファを保存してください:

autocmd TextChanged,TextChangedI <buffer> silent write

これは私のために動作します。

ソース

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