2014/12/25

Recent entries from same category

  1. clangd を使う時に便利なコマンド compiledb
  2. VimConf 2018 に行ってきた。
  3. Software Design 2018年7月号「Vim 絶対主義」の執筆に参加しました。
  4. Vim の :terminal の中から外の Vim を操る方法
  5. Vim と日本語入力の話。

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

Posted at by | Edit


blog comments powered by Disqus