Поиск/замена в Vim
Я хочу удалить все вхождения квадратных скобок, которые соответствуют этому регулярному выражению: \[.*\].*{
, но я хочу только удалить скобки, а не следующее: т.е. я хочу удалить скобки и что внутри них, только когда за ними следует открытая фигурная скобка.
Как мне это сделать с поиском/заменой Vim?
Ответы
Ответ 1
Вы можете использовать \zs
и \ze
, чтобы установить начало и конец совпадения.
:%s/\zs\[.*\]\ze.*{//g
должен работать.
Вы сообщаете Vim о замене того, что находится между \zs
и \ze
пустой строкой.
(Обратите внимание, что вам нужна опция + синтаксиса, скомпилированная в двоичном коде Vim)
Для получения дополнительной информации см. :help /\zs
или :help pattern
Изменить: На самом деле \zs в этом случае не требуется, но я оставляю его в образовательных целях.:)
Ответ 2
Если вы окружите последний бит своего регулярного выражения в скобках, вы можете повторно использовать его в своей замене:
:%s/\[.*\]\(.*{\)/\1/g
\ 1 ссылается на часть регулярного выражения в скобках.
Мне нравится создавать свою строку поиска, прежде чем использовать ее в поиске и замене, чтобы убедиться, что это правильно до того, как я сменил документ:
/\[.*\]\(.*{\)
Это будет означать все события того, что вы замените.
Затем запустите команду% s без поискового запроса, чтобы заставить ее повторно использовать последний поисковый запрос
:%s//\1/g
Ответ 3
Как насчет:
:%s#\[.*\]\ze.*{##g
Обратите внимание, что элемент \ze
отмечает конец совпадения, поэтому все, что следует, не заменяется.
Ответ 4
Это запустит ваше регулярное выражение в текущем файле:
:%s/\[.*\]\(.*{\)/\1/g