Vim,查找并将 `^(.*)` 替换为 `^{.*}`

Vim,查找并将 `^(.*)` 替换为 `^{.*}`

我正在尝试查找并用caret open_parentheses some_content close_parentheses( ie 替换 (ie ^(.*))但遇到了问题。caret open_curly_bracket the_same_content close_curly_bracket^{.*}

1)我不明白如何保存匹配的通配符内容.*

2)我不知道如何制定转义序列来指定花括号和圆括号。

我一直在经历页面相当长一段时间,并尝试了以下

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

答案1

所有这些字符都具有特殊功能,具体取决于它们前面是否有转义字符。这取决于字符,具有特殊功能的字符前面的转义序列是否利用了它(即 a^执行特殊功能, a\^不执行,而 a(执行不是执行特殊功能,并且 a\(确实如此。

您要查找的表达式如下

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

表达式字面上说明,匹配插入符号随后左括号其次是除右括号之外的任意字符随后是右括号并将其替换为 aa插入符号随后打开花括号接下来是搜索时找到的内容除右括号外的任何字符\((即和之间的内容\))后跟右括号

注意:还有其他方法

答案2

您确实在寻找插入符号吗?
插入符号通常表示从一行的开头开始寻找模式。

假设你是...

一些文本 ^( 更多文本 ) 和更多 ^( 更多文本 ) 和更多

--并且--你知道它变成了什么:

一些文本 ^{ 更多文本 } 以及更多 ^{ 更多文本 } 以及更多

然后,使用:

: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

% 表示整个文件。

相关内容