ディスク上のバージョンからファイルを更新するコマンドは次のとおりです。:e!
バッファ内のすべてのファイルに対して同じことを行うにはどうすればよいですか?
背景:バッファを含む1つのvimを開いた状態で複数のブランチでgitを使用しているため、これが必要です。ブランチをチェックアウトするときに、vimを更新してもらいたいです。
この:checkt[ime]
コマンドは、まさにこの目的のために設計されています。
変更されたバッファをリロードするように求められます。プロンプトをスキップしたい場合は、:set autoread
事前に行うことができます(ローカルの未保存の変更を含むバッファーでプロンプトが表示されます)。
また、受け入れられた回答についてStevenLuが言及した構文の強調表示の問題を回避します。:bufdo
設計による構文の強調表示をオフにします。
経由で見つかりました:http://vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html
のドキュメントを読んbufdo
でください、それはあなたが望むことをするはずです。
これが私の.vimrcに入れてしまったものです:
fun! PullAndRefresh()
set noconfirm
!git pull
bufdo e!
set confirm
endfun
nmap <leader>gr call PullAndRefresh()
差出人:help autoread
:
ファイルがVimの外部で変更されたことが検出され、Vimの内部で変更されていない場合は、自動的に再度読み取ります。ファイルが削除されている場合、これは実行されません。
私のように、常に古いが変更されていないバッファを受動的にリロードしたい場合は、これで作業が完了するはずです。
ただし、最後の詳細は、 vimが古いバッファーに気付いたときです。それはで強制することができますchecktime
。フォーカスイベントを設定している場合は、次checktime
のようにフォーカスを取得するたびに実行できます。
set autoread
autocmd FocusGained * checktime
この回答にも興味深い詳細がいくつかあります。
@Matthew Sがhttps://vi.stackexchange.com/a/462で言及しているように、次を使用できます。
:set noconfirm
:bufdo !e
:set confirm