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