:%s/\(A\)(\(\_.\{-}\))/modified\1{\2}
\( ................ start of a regex group
\) ................ end of a regex group
\_.\{-} ........... non-greedy regex
\1 ................ back reference to the regex group 1
[c] Confirm each substitution. Vim highlights the matching string (with
|hl-IncSearch|). You can type: *:s_c*
'y' to substitute this match
'l' to substitute this match and then quit ("last")
'n' to skip this match
<Esc> to quit substituting
'a' to substitute this and all remaining matches {not in Vi}
'q' to quit substituting {not in Vi}
CTRL-E to scroll the screen up {not in Vi, not available when
compiled without the |+insert_expand| feature}
CTRL-Y to scroll the screen down {not in Vi, not available when
compiled without the |+insert_expand| feature}
If the 'edcompatible' option is on, Vim remembers the [c] flag and
toggles it each time you use it, but resets it when you give a new
search pattern.
{not in Vi: highlighting of the match, other responses than 'y' or 'n'}
4条答案
按热度按时间qkf9rpyu1#
为了匹配多行模式,我们需要
\_.\{-}
,这意味着非贪婪正则表达式搜索:使用
very magic option
请参见:h \v
。llew8vvj2#
你可以通过录制和重放一个vim宏来实现:(例如,
q
):记录:
重播:
只要A的
(...)
配对良好,这个方法就可以工作,甚至在嵌套的情况下也可以工作:wnavrhmk3#
substitute
命令支持用于确认的标志c
:见
elcex8rz4#
您可以使用以下命令:
第一个月
让我们来分析一下:
:s
::substitute
命令的缩写。/
:模式的开始。\(A\)
:捕获第一个捕获组中的"A"。(
:文本"("\(B C\)
:捕获第二个捕获组中的"B C"。)
:文字")"/
:模式结束。替换开始。\1
:对第一个捕获组("A")的反向引用。{\2}
:对第二个捕获组('B C')的反向引用,用大括号括起来。/g
:替换结束,标志"g"使每行应用多次替换。这个"|命令之间的,使它们自动一个接一个执行。
另请参见:
:help :|
:help pattern.txt
:help usr_27.txt