vimの置換のデミリタはスラッシュ以外も利用できる

提供: neovim/vim入門
2017年6月11日 (日) 23:27時点におけるDaemon (トーク | 投稿記録)による版 (スラッシュ以外を使う利点は?)

移動: 案内検索
スポンサーリンク

vimの置換では、よくデミリタとしてスラッシュ(/)が利用されますが、実はスラッシュ以外も利用できます。スラッシュ以外を利用することで、/ をエスケープせずに使うといったこともできます。

読み方

置換
ちかん

概要

vimでは、 :s コマンドを利用して、文字列の置換 を行います。

:s/foo/bar/

置換コマンド、検索パターン、置換後のテキストを区切るためのデミリタ(区切り文字)として、スラッシュ (/) を利用していることが多いのではないでしょうか? その背景には、例として、 スラッシュが利用されることが多いからではないかと思います。

実際に、 vim Noヘルプでも、例がスラッシュだったりします。 以下は、 vim の日本語のヘルプの抜粋です。

4.2 置換						*:substitute*
							*:s* *:su*
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
			[range] の各行で {pattern} のマッチを {string} に置き
			換える。
			{pattern}については|pattern|を参照すること。
			{string} は普通の文字列でもよいし、特別な指定方法を使っ
			てもよい。|sub-replace-special| を参照。
			[range][count] が指定されないと、現在行内でのみ置
			換を行う。
			[count] が指定されると、[range] の最終行から数えて
			[count] 行で置換を行う。[range] が指定されないと、現在
			行から開始する。
			|cmdline-ranges| も参照。
			フラグについては |:s_flags| を参照。

スラッシュ以外の区切り文字をデミリタとして使えるもの

いろいろな記号が利用できます。

  • コロン (:)
  • セミコロン (;)
  • エクスクラ メーション・マーク (exclamation mark) (!)
  • アットマーク (@)
  • シャープ (#)
  • アスタリスク (*)
  • ドット (.)
  • カンマ (,)

逆に使えないものとして、パイプ (|) が挙げられます。

スラッシュ以外の区切り文字をデミリタとして使う例

よくある置換の例を挙げます。

:s/foo/bar/

さて、上の例のデミリタを変えて、例を示します。

:s!foo!bar!
:s:foo:bar:
:s;foo;bar;
:s@foo@bar@
:s.foo.bar.
:s#foo#bar#

スラッシュ以外を使う利点は?

デミリタとして、スラッシュ以外を使う利点ですが、スラッシュをエスケープせずにパターンや置換後のテキストに使えることではないでしょうか。 パターンや置換後のテキストの指定に、スラッシュを使いたいときに、デミリタにスラッシュを使っている場合、バックスラッシュでスラッシュをエスケープしなければなりません。

スラッシュをエスケープしはじめると、コマンドが読みにくくなってしまい、なにがなんだかわからなくなってしまう方もいるのではないでしょうか?

:s/foo/https:\/\/foo.com\//

デミリタをシャープ(#)に変えてみるとスッキリした形になります。

:s#foo#https://foo.com/#

ほら、とっても読みやすいでしょ?

まとめ

  • 置換のデミリタはスラッシュ以外も利用できる
  • パターンや置換後のテキストにスラッシュを使いたい場合には、スラッシュ以外のデミリタを利用する
  • パターンや置換後のテキストに出てこない記号でデミリタを代替するとエスケープレスで読みやすいコマンドが書ける

関連項目




スポンサーリンク