vimの置換でスラッシュをエスケープせずに置換する方法
vimの置換は、 :s/pattern/string/options を使って行います。デミリタをスラッシュにしてしまうと、string の部分にスラッシュを使用する場合には、バックスラッシュによるエスケープ処理が必要になります。デミリタを変更することで、バックスラッシュによるエスケープなしに、置換ができるようになります。
読み方
- pattern
- ぱたーん
概要
vimの置換は、 :s/pattern/string/options を使って行います。デミリタをスラッシュにしてしまうと、string の部分にスラッシュを使用する場合には、バックスラッシュによるエスケープ処理が必要になります。
エスケープ処理が入ると、可読性が著しく悪くなります。
:s/foo/https:\/\/foo.com\//
どこまでが 置き換え後の文字列なのか、デミリタの記号なのかが、よく考えないとわからなくなってしまいます。
vimの置換のデミリタは、スラッシュを使わなければならないのではなく、ほかの記号でも代替可能です。
利用できるデミリタの例は、 vimの置換のデミリタはスラッシュ以外も利用できる をご参照下さい。
スラッシュ以外のデミリタを利用する
デミリタとして、スラッシュ以外を使う利点ですが、スラッシュをエスケープせずにパターンや置換後のテキストに使えることではないでしょうか。 パターンや置換後のテキストの指定に、スラッシュを使いたいときに、デミリタにスラッシュを使っている場合、バックスラッシュでスラッシュをエスケープしなければなりません。
スラッシュをエスケープしはじめると、コマンドが読みにくくなってしまい、なにがなんだかわからなくなってしまう方もいるのではないでしょうか?
:s/foo/https:\/\/foo.com\//
デミリタをシャープ(#)に変えてみるとスッキリした形になります。
:s#foo#https://foo.com/#
非常に読みやすくなったのではないでしょうか?
スラッシュの置換の例
スラッシュ(/) を スラッシュスラッシュ(//)する場合には、デミリタをスラッシュにシた場合、このようなコマンドになります。
:s/\//\/\//
これだけでも、頭がおかしくなりそうです。
デミリタをスラッシュ以外にかえることで、こんなにスッキリします。
:s#/#//#
URL を書き換える例だと、こんな感じで、やはり読みにくいです。
:s/http:\/\/foo.com\/index.html/https:\/\/bar.com\/index.php/
こんな感じで簡単になります。
:s#http://foo.com/index.html#https://bar.com/index.php#
まとめ
- 置換のデミリタはいろいろな記号が利用できる
- 置換のデミリタを変えれば、パターンや置換後の文字列に含める記号のエスケープ処理を省略できる
関連項目
ツイート