Home > Vim Hacks > Hack #117: 置換行為を繰り返す

Hack #117: 置換行為を繰り返す

問題

:substitute (:s)による置換処理は頻繁に使います。 バッファ全体を対象にする場合は:%s/foo/bar/gなどでできますし、 特定範囲のみを対象にする場合はVisual modeで選択しておいて :s/foo/bar/gでできます。

では飛び飛びの場所で置換を行なう場合はどうでしょうか。 例えばソースコード中の特定の関数3つに対して置換を行なうとしましょう。 この場合は3箇所それぞれを対象として置換を実行することになりますが、 毎回 :s/foo/bar/g のような長ったらしいコマンドを入力したくはありません。 <Up>/<Down> でコマンドの入力履歴を辿って実行してもいいのですが、 これらのキーは概して遠い位置にあるため押下が面倒ですし、 押し易いキーバインドを設定することも面倒です。 どうにかして最小の手数で置換行為を繰り返せないでしょうか。

解決方法

以下のコマンドを実行します:

:s

通常、:sには検索パターンと置換文字列を指定しますが、 それらを省略した場合は最後に実行された :sと同じ検索パターンと置換文字列で置換が行なわれます。

なお:sでは :s/foo/bar/gc などのフラグは無視されます。 フラグまで同一にする場合は:sの代わりに

:&&

を使います。

また1行だけ繰り返す場合には:sの代わりに

&

を使うこともできます。

参考資料

kana

Comments:6

parasporospa 10-01-18 (月) 14:53

@: もいいですよ!

kana 10-01-19 (火) 7:30

@:はkey mappingの設定如何で動作しなくなるという致命的バグがありまして……

mattn 10-01-19 (火) 11:29

@:はkey mappingの設定如何で動作しなくなるという致命的バグがありまして……

バグ?設定ミスですよね。

kana 10-01-19 (火) 11:34

vim -N -u NONE -c ‘noremap : ;’ -c ‘noremap ; :’

mattn 10-01-19 (火) 15:22

vim -N -u NONE -c ‘noremap : ;’ -c ‘noremap ; :’

normal.c:16 # Get an additional character if we need one. 以降の冒頭で

++no_mapping; ++allow_keys; /* no mapping for nchar, but allow key codes */

してマップを抑制しているので意図的かと思いますよ。まぁどちみち

:echo nr2char(getchar())

で「:」タイプしても「:」が表示されるので完全にキー入れ替えは無理だと思います。 想定していない使い方でバグと言われると少しvimが可愛そうかな。苦笑

mattn 10-01-19 (火) 15:23

行番号間違いました。normal.c の 940 す。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://vim-users.jp/2010/01/hack117/trackback/
Listed below are links to weblogs that reference
Hack #117: 置換行為を繰り返す from Vim-users.jp

Home > Vim Hacks > Hack #117: 置換行為を繰り返す

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

    Return to page top