在vi中使用通配符使用搜索的模式进行搜索和替换

时间:2017-05-02 15:41:57

标签: regex vim

我在文件中有以下行:

HELLO(qwqwq)
My name ()
Your name ()
HELLO(dsdasd)
HELLO(sdsdsdasdasdasf)

我希望将其替换如下:

qwqwq:
My name ()
Your name ()
dsdasd:
sdsdsdasdasdasf:

这里我有一个模式HELLO(.*),可用于搜索和替换命令,但如何在vim中执行?

2 个答案:

答案 0 :(得分:3)

这一行将为您提供给定示例的帮助:

%s/\vHELLO\(([^)]*).*/\1:/

使用:gnormal命令也很简单:

:g/HELLO/norm! %yi(VpA:

答案 1 :(得分:0)

首先,进行搜索(我选择不使用非常神奇的模式) 因为无论哪种方式,我都要使用escape" \"使用非常魔法, 它只会改变我必须使用的地方。

/HELLO(\([^)]*\))
( ..................... regular parenthesis 
\( .................... start group 1
[^)]* ................. denies everything until \) closing group 1
\)  ................... close group 1
) ..................... regular parenthesis

测试完搜索模式后,您可以在搜索中使用它, 这里我使用另一个分隔符而不是斜杠。省略搜索模式将使vim使用先前的搜索作为模式。

%s,,\1,g

我喜欢这种方法因为更安全,在进行任何更改之前我们可以使用搜索进行测试