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で判定する場合は、もう少し細かな条件が必要となります。

