У меня есть куча строк, как это:

[some_strings_in_square_bracket]$ some_strings_not_in ..
[some_strings_in_square_bracket]$ some_strings_not_in ..
[some_strings_in_square_bracket]$ some_strings_not_in ..
[some_strings_in_square_bracket]$ some_strings_not_in ..
[some_strings_in_square_bracket]$ some_strings_not_in ..

Я хочу удалить все в скобках плюс знак доллара и следующие пробелы.

Я старался:

:g/\[.+?\]\$\s/d

но он говорит, что шаблон не найден. regex работает в python:

>>> print x
[some_strings_in_square_bracket]$ some_strings_not_in ..
[some_strings_in_square_bracket]$ some_strings_not_in ..
[some_strings_in_square_bracket]$ some_strings_not_in ..
[some_strings_in_square_bracket]$ some_strings_not_in ..
[some_strings_in_square_bracket]$ some_strings_not_in ..

>>> print re.sub('\[.+?\]\$\s', '', x)
some_strings_not_in ..
some_strings_not_in ..
some_strings_not_in ..
some_strings_not_in ..
some_strings_not_in ..

1 ответ1

2

Используйте это вместо этого, он заменяет сопоставленное регулярное выражение ничем.

:%s/^\[.*\]\$\s\+//

Даже если :g/\[.+?\]\$\s/d совпало с тем, что вы хотели, чтобы d в конце удаляло строку, а не совпавшее регулярное выражение.

Что касается того, почему он не совпадает, вам нужно убежать от + . Vim рассматривает это как литерал по умолчанию, а не как один или несколько.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .