Vim: заменить все точки, кроме последней в строке
Я ищу способ, чтобы заменить все точки в строке, кроме последней.
пример:
Blah - whatever - foo.bar.baz.avi
должны статьBlah - whatever - foo bar bar.avi
поскольку у меня будет более одной строки в файле, а количество точек варьируется в каждой строке, я ищу общее решение, а не что-то вроде "заменить первые совпадения X" на X, являющееся константой.
3 ответов
Это, кажется, сделать трюк:
%s/\.\(.*\.\)\@=/ /g
\@=
это lookahead. Он соответствует только полной остановке, если есть какие-либо следующие полные остановки.
посмотреть :help zero-width
.
в качестве варианта первого ответа вы можете предпочесть следующий синтаксис:
%s/\.\ze.*\./ /g
Это позволит вам поставить утверждение, что после оператора поиска будет следующая полная остановка.
другим способом, который может быть полезен для изучения (замена внутри визуального выбора), было бы::g/^/normal $F.hv0:s/\%V\./ /g
^M
где ^M
вводится с CTRL-V, Enter.
это означает: для каждой строки (g/^/
) типа $F.
(перейти к последней точке), визуально выберите от символа влево до начала строки (hv0
), а затем замените точками (:s/\./ /g^M
) только внутри визуального выбора (\%V
).