Vimの置換コマンドは、複雑な文字列を置く変えることもでき、とても便利です。
しかし、複雑になればなるほど、そのコマンドはむずかしくなります。
今回は、Vimの置換コマンドの使い方を、基本から、正規表現を使ったものまで、順番に紹介します。
全体を置換するコマンド
たとえば、つぎのような文章があったとします。
米国でも米が作られています。
また、米印は米語でasteriskと言います。
米はとてもおいしいです。
この文章の、「米」を「パン」に置換してみます。
テキスト全体を置換するコマンドは次のようになります。
:%s/米/パン/g
すると、次のように置換されます。
パン国でもパンが作られています。
また、パン印はパン語でasteriskと言います。
パンはとてもおいしいです。
なんだか、よく分からない文章になってしまいました。
では、次でもっと詳しい置換コマンドを使い方を見ていきましょう。
置換コマンド一覧
ここで、置換コマンドの一覧をかんたんな表にまとめました。
コマンド | 説明 |
---|---|
:s/米/パン/ | カーソル行の、最初の「米」を「パン」に置換 |
:s/米/パン/g | カーソル行の、すべての「米」を「パン」に置換 |
:%s/米/パン/ | すべての行の、最初の「米」を「パン」に置換 |
:%s/米/パン/g | すべての「米」を「パン」に置換 |
:%s/米/パン/gc | すべての「米」を「パン」に、ひとつずつ確認しながら置換 |
最初に:s
を入力するとカーソル行、:%s
とするとすべての行(ファイル全体)の置換になります。
さらに、最後にg
を入れることで、その行、または複数行の、すべての文字の置換になります。
さきのどのように「米」という文字が複数あって、そのなかのいくつかを置換したい場合などは、表の最後の、ひとつずつ確認しながら置換、を使えばうまくいきそうです。
ここからは、その方法も含めて、さまざまな置換の方法を紹介します。
ワードをひとつずつ確認しながら置換する
下のように、c
をつけることで、ひとつずつ確認しながら置換していくことができます。
:%s/米/パン/gc
このコマンドを実行すると、下のように、nでスキップ、yで置換、というふうに、ひとつずつ置換できます。
置換コマンドを使って、HTMLタグを削除する
<p>米国でも米が作られています。</p>
<p>また、米印は米語で<span class="bold">asterisk</span>と言います。</p>
<p>米はとてもおいしいです。</p>
しかし、このタグをすべて削除したいとします。
そんなときは、正規表現を使うと、すべてのHTMLタグを削除することができます。
:%s/<.\{-}>//g
米国でも米が作られています。
また、米印は米語でasteriskと言います。
米はとてもおいしいです。
ただ、上記の置換コマンドは、HTMLタグの途中でPHPが使われていたりすると、うまく使えないのでご注意ください。
「〜〜」を『〜〜』に置換する(置換したい文字の一部を使って置換)
たとえば、つぎのようなテキストがあったとします。
「米国」でも「米」が作られています。
また、「米印」は「米語」で「asterisk」と言います。
「米」はとてもおいしいです。
これらの「〜〜」を、すべて『〜〜』に置き換えたいとします。
そんなときは、下のような置換コマンドを使います。
:%s/「\(.\{-}\)」/『\1』/g
これで、括弧を置き換えることができました。
『米国』でも『米』が作られています。
また、『米印』は『米語』で『asterisk』と言います。
『米』はとてもおいしいです。
まとめ
今回は、Vimを使った置換の方法を紹介しました。
基本的には:%s/〜〜/〜〜/g
でファイル全体のすべてのワードを置換することが多いと思います。
また、:%s/〜〜/〜〜/gc
というふうに、c
を使うことで、ひとつずつ確認しながら置換ができるので便利です。
さらに、正規表現も使えるので、複雑な文字の置換も行なうことができます。