「vimの置換でスラッシュをエスケープせずに置換する方法」の版間の差分

提供: neovim/vim入門
移動: 案内検索
(ページの作成:「vimの置換は、 :s/pattern/string/options を使って行います。デミリタをスラッシュにしてしまうと、string の部分にスラッシュを使...」)
 
 
行30: 行30:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
非常に読みやすくなったのではないでしょうか?
 
非常に読みやすくなったのではないでしょうか?
 +
== スラッシュの置換の例 ==
 +
スラッシュ(/) を スラッシュスラッシュ(//)する場合には、デミリタをスラッシュにシた場合、このようなコマンドになります。
 +
<syntaxhighlight lang="vim">
 +
:s/\//\/\//
 +
</syntaxhighlight>
 +
これだけでも、頭がおかしくなりそうです。
 +
 +
デミリタをスラッシュ以外にかえることで、こんなにスッキリします。
 +
<syntaxhighlight lang="vim">
 +
:s#/#//#
 +
</syntaxhighlight>
 +
 +
URL を書き換える例だと、こんな感じで、やはり読みにくいです。
 +
<syntaxhighlight lang="vim">
 +
:s/http:\/\/foo.com\/index.html/https:\/\/bar.com\/index.php/
 +
</syntaxhighlight>
 +
こんな感じで簡単になります。
 +
<syntaxhighlight lang="vim">
 +
:s#http://foo.com/index.html#https://bar.com/index.php#
 +
</syntaxhighlight>
 
== まとめ ==
 
== まとめ ==
 
* 置換のデミリタはいろいろな記号が利用できる
 
* 置換のデミリタはいろいろな記号が利用できる

2017年6月13日 (火) 00:07時点における最新版

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#

まとめ

  • 置換のデミリタはいろいろな記号が利用できる
  • 置換のデミリタを変えれば、パターンや置換後の文字列に含める記号のエスケープ処理を省略できる

関連項目