4

Я пытаюсь найти и заменить caret open_parentheses some_content close_parentheses (то есть ^(.*)) caret open_curly_bracket the_same_content close_curly_bracket (то есть ^{.*} Но у меня есть проблемы.

1) Я не понимаю, как сохранить соответствующий шаблонный контент .*

2) Я не вижу, как сформулировать escape-последовательность для указания фигурных скобок и скобок.

Я перебираю эту страницу довольно долго и пытаюсь сделать следующее

%s/^(*)/^{*} /gc
%s/^(.*)/^{.*} /gc
%s/^/(.*/)/^{.*} /gc

2 ответа2

6

Все эти символы имеют специальную функциональность в зависимости от того, предшествует ли им escape-символ. Это зависит от символа, использует ли его escape-последовательность, предшествующая символу со специальной функциональностью (т. Е. ^ Выполняет специальные функции, а \^ не выполняет, где a ( не выполняет специальные функции, а \( выполняет).

Вы ищете следующее выражение

s/\^(\([^)])\))/\^\{\1\}/g

Выражение буквально состояние, соответствует каретке , за которым следует open_parenthesis с последующим любым символом , кроме close_parenthesis с последующим close_parenthesis и заменить аа каретки сопровождаемой open_curly_bracket с последующим содержанием найденного при поиске any_character_except в close_parenthesis (то есть содержание между \( и \)) за которым следует close_curly_bracket

Примечание: существуют и другие подходы

0

Вы действительно ищете каретный персонаж?
Каретка обычно означает начать поиск шаблона в начале строки.

Предполагая, что вы ...

немного текста ^(больше текста) и больше ^(больше текста) и больше

- И-- вы, что это изменилось на:

немного текста ^ {больше текста} и больше ^ {больше текста} и больше

Затем используйте:

: S -\^(([^)]+))- ^ {\1} -gc

:s      the substitute command
-       start pattern, use - instead of / for clarity
\^      look for the ^ char, need to escape
(       followed by (
\(      start capture
[^)]\+  one or more chars except )
\)      end capture
)       followed by )
-       start replace, use - instead of / for clarity
^{      replace ^( with ^{
\1      replace with the captured text
}       replace ) with }
-       start flags, use - instead of / for clarity
gc      confirm replace for each occurance in the line

Если вы хотите, чтобы поиск и замена охватывали весь файл, используйте:

:% S -\^(([^)]+))- ^ {\1} -gc

% Означает весь файл.

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