web-dev-qa-db-ja.com

vimのディスクからバッファー内のすべてのファイルを更新します

ディスク上のバージョンからファイルを更新するコマンドは:e!

バッファ内のすべてのファイルに同じことを行うにはどうすればよいですか?

背景:必要なのは、バッファーを含む1つのvimを開いた状態で複数のブランチでgitを使用しているためです。ブランチをチェックアウトするときに、vimを更新したいと思います。

120
odwl

bufdoのドキュメントを読んでください。必要なことを行うはずです。

84
pmf

:checkt[ime]コマンドは、まさにこの目的のために設計されています。

変更されたバッファをリロードするよう求められます。プロンプトをスキップしたい場合は、:set autoread事前に(まだローカルに保存されていない変更があるバッファーのプロンプトが表示されます)。

また、受け入れられた回答についてSteven Luが言及した構文強調表示の問題も回避します。 :bufdoは、設計による構文の強調表示をオフにします

経由で発見: http://vim.1045645.n5.nabble.com/Bug-report-bufdo-e-breaking-syntax-highlighting-on-displayed-buffers-tp1209995p1209998.html

116
Paul Fenney

これが私が.vimrcに入れたものです:

fun! PullAndRefresh()
  set noconfirm
  !git pull
  bufdo e!
  set confirm
endfun

nmap <leader>gr call PullAndRefresh()
18
Ivan

:help autoreadから:

ファイルがVimの外部で変更されたことが検出され、Vimの内部で変更されていない場合、自動的に再度読み取ります。ファイルが削除されると、これは行われません。

私のように、常に受動的にだけをしたい場合(-===-)古くなったが変更されていないバッファーをリロードすると、これで仕事が完了したように見えます。

ただし、最終的な詳細はwhenvimは古いバッファに気づきます。 checktimeで強制できます。 フォーカスイベントのセットアップ がある場合、次のようにフォーカスを取得するたびにchecktimeを実行できます。

set autoread
autocmd FocusGained * checktime

この回答 には興味深い詳細もあります。

7
phs

@Matthew Sがここで言及されているように https://vi.stackexchange.com/a/462 を使用できます:

:set noconfirm
:bufdo !e
:set confirm
0
MOHRE