スペースで区切られた4つ以上の文字を含むテキストを検索し、スペースを削除する置換コマンドを作成しようとしています。
%s/\v%(([a-zA-Z])\s){3,}([a-zA-Z])/\1\2/gc
しかし、
L i g ht
~になる
ght
予想通り、グループにはg
この場合、最後の一致のみが含まれているためです。グループ内のすべての試合を累積して\1
参加する方法は?
ベストアンサー1
(...){n,m}
orのような繰り返しグループが与えられると、(...)+
Vimはそのグループのすべての項目を抽出する方法がないと思います。すべての正規表現関連関数とコマンドのうち最後の項目のみを使用できます。
つまり、入れ子になった代替アイテムを使用できます。
:s/\v%([a-zA-Z]\s){3,}[a-zA-Z]/\=substitute(submatch(0), '\s', '', 'g')/gc
\=
置換に A がある場合、:s
Vim は置換を式として評価します。この表現では、substitute()
関数は一致する全文からすべてのスペースを削除します:s
(submatch(0)
)、Ligh
与えることからL i g h
。