vi で全文置換する時は、コマンド・モード (インサート・モードにいる時は ESC を押すとコマンド・モードに入れる) で「:」を入力した後、次のやうにする。
%s/foo/bar/g
上の例は、「foo」という文字列を「bar」に置換している。
&
さて、ここで「&」といふものの使い方を紹介しませう。この「&」を置換側で使うと、置換元の文字列へと展開される。例えば、「Eulenspiegel」を「Till Eulenspiegel」としたい場合、次のコマンドを打つ:
%s/Eulenspiegel/Till &/g
もし & を使わなかったら、かうなる:
%s/Eulenspiegel/Till Eulenspiegel/g
なんか置換側を typo してしまいそう。それに比べて、「&」一つで済むのはスマート!
C と &&
普段、vi を使わないぼくがこんなエントリーを書いているのは、この「&」におもいっきしハマったから。
というのも、vi 使いの人が置換が変になると言ってぼくに相談してきた。その時、彼は C のコードを修正していて、確かこんなコード
#if defined(FOO) || defined (BAR)
を、次の形に置換しやうとしていた。
#if !defined(FOO) && !defined(BAR)
それで使っちゃった置換式がこれ。
%s/#if defined(FOO) || defined (BAR)/#if !defined(FOO) && !defined(BAR)/g
見事にハマった。結局、& を \ でエスケープしたら通った。
%s/#if defined(FOO) || defined (BAR)/#if !defined(FOO) \&\& !defined(BAR)/g
vi。奥が深い。
No comments:
Post a Comment