本サイトではアフィリエイト広告を利用しています。
2019/10/24
Vimでよく使う正規表現
vimでよく使う正規表現の書き方のメモです。
正規表現は便利ですが覚えるのは難しいです。特にVimは他のアプリと異なるエスケープのルールがあるので混乱しがちです。
\v
でモード指定することも出来ますが、私はデフォルトで使うのが好みです。
あくまでも自分用メモです。参考になるようでしたら真似してみてください。
新しい正規表現のテクニックや便利なパターンを見つけたら追記していくつもりです。
概要
- 正規表現を用いた置換
- エスケープが必要なもの
- 修飾子 オプション
- 検索文字列のエスケープ
正規表現を用いた置換
基本の使い方
:s/hoge/huga/
:s/hoge/huga/g
:%s/hoge/huga/
:10,20s/hoge/huga/
一つずつ確認する
末尾にc
を付けると対象を確認しながら置換できる。
y
で置換、n
で次の候補へ。q
で終了、a
は以降全部置換、l
は置換して終了。
:%s/hoge/huga/gc
後方参照として置換に利用
エスケープが必要な文字にちょっと注意。
\1
,\2
で置換先で参照できる。後方参照。
:s/^hoge\(.\+\)$/huga\1/
&
はマッチ全体
事前に検索
直前の検索の結果が自動的に利用できます。検索に一致した部分をすべて置換する。
/hoge
:%s//huga/g
<C-r>レジスタ
を使って入力してもいいと思います。
エスケープが必要なもの
\+
\?
\{1,3}
\<the\>
\( \)
\(aaa\|bbb\)
\%( \)
最後の%
付けるのは後方参照しないようにするため。その結果、処理が早かったりする。後方参照は多分9個までなのでそこにも影響。
特殊な文字
\s 空白文字
\d [0-9]
\x [0-9A-Fa-f]
\o [0-7]
\w [0-9A-Za-z_]
\h [A-Za-z_]
\a [A-Za-z]
\l [a-z]
\u [A-Z]
大文字にすると逆になり、それ以外にマッチする
\_sにすると改行を含む文字にマッチする
\e Esc
\t Tab
\n 改行
\r CR
\b BS
修飾子 オプション
大文字小文字の厳密化
大文字小文字を厳格に区別するためには\C
を付ける。実は最初でなくてもどこにつけても良い。
:%s/\CHoge/Huga/g
モード
4つのモードがある。
- magic
- nomagic
- very magic
- very nomagic
\v
を付けることで、very magic モードとなり、他と同様な文法で書くことができるという認識です。
:s/\v^hoge(.+)$/huga\1/
検索文字列のエスケープ
\
や/
を初めとして、文字列として使うにはエスケープしないといけない文字があります。
escapeスクリプトを使って便利に変換する方法が以下です。
レジスタuの中身の\と/をエスケープする
1. 対象のURLをレジスタuにヤンク
2. / で検索プロンプトを表示
3. <C-r>=でExpressionレジスタのプロンプトを表示
4. =escape(@u,\/)を入力してリターン
おわりに
モードを変更すれば他のアプリケーションと同様な文法で書くことも出来ますし、設定でそれをデフォルトにすることもできます。
私は好みでデフォルトのVimルールをなるべく使っています。
複雑な正規表現書くときは\v
使ったほうがスッキリできるので良いと思います。