- 2010-01-16 (土) 0:00
- Vim Hacks
問題
: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
- Newer: 京都でVim勉強会#5が開催されます
- Older: Vim使いのレベル10
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 す。
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

