Xeebi

home categories feeds

Vim で直前の検索パターンを部分的に再利用する

問題

Vim で直前の検索パターンを部分的に再利用したい.直前の検索パターンをそのまま利用するのであれば,

/foo

で検索の後

:%s//bar

:%s/foo/bar/ と同等になる.そうではなくて,直前に使った検索パターンを再利用して置換のパターンを作りたい.

/,\n\s*}

で何気なく javascript で残念なアレの存在を確かめてから,滑らかに

:%s/\zs,\ze\n\s*}//

へと移行して,object を開いて書くときの最終行にくっついてる , を取り除きたい. q/ を使えばやや楽に /\zs,\ze\n\s*} を検索してから :%s/// できるが,そこにふた手間使いたくはない.

解決

Last search pattern register を使う (:h quote/).

このレジスタ "/ には直前に検索した pattern が入っていて,hlsearch などもこれを使っているらしい.これを使えば

:%s/<C-r>/

と打てば

:%s/,\n\s*/

と同等になる.めでたい.

参考

Vim - General - Reuse search pattern? に載ってた.

別の解決法

(25 Aug 2014 追記)

「何気なく使う検索から置換への滑らかな移行」なら上のが良いと思われるが,「置換パターンを実験したりしつつ定めたい」のであれば osyo-manga/vim-over を使うのがいいかもしれない.作者による解説記事は http://d.hatena.ne.jp/osyo-manga/20131105/1383664737