Home > Vim Hacks > Hack #21: 複数のバッファを一度に変更する – :bufdo編

Hack #21: 複数のバッファを一度に変更する – :bufdo編

問題

日常的に複数のファイルを取り扱っていると、同じ変更を複数のファイルに対して行いたい場合があります。例えば:%substitute/foo/bar/gのような単純な置換を行うとしましょう。取り扱うファイル数が数個なら各々のファイルを開いて同じコマンドを入力して済ませられます。しかしファイル数が10個や20個となってくると手作業では時間がかかりますしミスも誘発します。なんとかして同じ変更を複数のファイルに行うこ とはできないでしょうか。

解決方法

複数のファイルを一斉に変更するには:bufdoを用います。例えば先程の例の場合は次の手順で実現することができます:

:bufdo %substitute/foo/bar/g | update

解説

Vimには:bufdoのような複数のバッファを一度に処理するためのExコマンドが用意されています。:bufdoは全てのバッファを対象としますが、他にも:argdo:tabdo:windoがあり、それぞれ対象とするものが異なります。

分かり易さのために「複数のファイルを一斉に変更する」と表現しましたが、実際には各ファイルを開いて指定されたExコマンドを実行することを繰り返します。上記の例は、実際にやりたいことだけを表すと以下のコマンドになりますが、

:bufdo %substitute/foo/bar/g

ほとんどの場合、これは期待通りに動かないでしょう。これは:bufdoの処理過程において、あるバッファに変更を加えた後、それを保存しないまま次のバッファを開こうとするからです。そしてVimのデフォルトの設定ではそのようなケースをエラーとするので、:bufdoの処理が中断されます('autowrite''hidden'が有効な場合を除く。デフォルトではどちらも無効)。

そのため、変更を行った後に保存を行うよう:updateまたは:writeを最後に記述する必要があります。

参考資料

kana
このエントリーをはてなブックマークに追加
はてなブックマーク - Hack #21: 複数のバッファを一度に変更する – :bufdo編
Share on Facebook
Post to Google Buzz
Bookmark this on Google Bookmarks
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://vim-users.jp/2009/06/hack21/trackback/
Listed below are links to weblogs that reference
Hack #21: 複数のバッファを一度に変更する – :bufdo編 from Vim-users.jp

Home > Vim Hacks > Hack #21: 複数のバッファを一度に変更する – :bufdo編

Search
Feeds
Links
  • 公式
  • 勉強会
  • 情報
  • コミュニティ
  • Meta
    Etc
    Creative Commons License
    This blog is licensed under a Creative Commons License.

    Return to page top