66 基本コマンド ( :substitute とか :global とか )

人のエントリに乱入してみる。

http://d.hatena.ne.jp/akio0911/20080319/1205916091

人のエントリに勝手に追記

% はファイル全体。これは 1,$ と同じ。詳しくはヘルプ参照。

:h cmdline-ranges
:h :range

というわけで、下の二つは同じ。コマンド実行時の範囲指定の基本だあね。

:%s/string/replace/g
:1,$s/string/replace/g

範囲指定覚えついでに :global なんてどうよ

ついでに書いとくと :substitue もいいけど :global もオススメ!

:h :global

入力文字数は多くなるけど「条件を満たす行すべてに特定のコマンドを実行したい」なんて場合に力を発揮してくれる。:normal との組み合わせで色々できるよ。使い方は詳しくはヘルプ参照!

:g//s/string/replace/g

バッファという枠を飛び越えていこうよ!(:windo, :bufdo)

:h :windo
:h :bufdo

各ウィンドウ・各バッファで特定のコマンドを実行するコマンドには :windo, :bufdo がある*1。だから、すべてのバッファで特定の文字列を一括置換したい場合は以下のようになる。

:bufdo! %s/string/replace/g

コマンド実行後に:bufdoが最後に見たバッファに移動してしまうが、その場合はあわてず :bnext とすれば、戻れるはずだ。上記の例では、変更は保存されない。すべて保存していいのなら以下のようにする。

:bufdo %s/string/replace/g | w

コマンドのあとに | をつけることで連続でコマンドを実行する。:substitute のあとに :write を実行して、各バッファごとに保存してるだけ。すごく簡単!

最後に

快適な Vim ライフを送ってくだしあ!

*1::tabdo なんてのもあったと思う。でも、おれがタブを使わないので興味ない。