VimでURLをドメインだけに置換するコマンドを正規表現でうったら、本当に正規表現って意味不明なフォルムと思った。 - Qiita
http://qiita.com/mochizukikotaro/items/b15170dccb18d84f8cd2
:%s/\([:\/]\)\@<!\/.*$//g
なんか、とても意味不明なコマンドだ。きっと、もっとスマートなものがあるのだろう。コードゴルフで言えばトリプルボギー的な感じなのでしょうか。知らないけど。この問題は
- URL を扱うので
/
が多く、置換の区切りを/
にする場合エスケープが多くなる - very magic でないのでエスケープがさらに増える
この2点から生まれます。1点目は
:%s#\([:/]\)\@<!/.*$##g
#
や
:%s,\([:/]\)\@<!/.*$,,g
,
をセパレータにする事で少しは解消するかと思います。2点目は \v
を付ける事でキャプチャ \(\)
を ()
と書く事が出来ます。
ただし今回の例はパターンが短いので効果は出ませんが、もう少し長いパターンだと効果が表れます。
あと、この例では Vim 独自の \zs
を使う事でもう少しシンプルに書く事も出来ます。
:%s!//[^/]\+\zs/.*!!g
//
で始まり/
で無い物が続き\zs
そこまでは置換対象から外す/.*
を置換対象とする(※1)
結果、/.*
つまり URL のパス部分(※1)だけが空白に置き換えられるので URL のホスト名までが残ります。
もちろんちゃんとしたURLで判定する場合は、もう少し細かな条件が必要となります。