查找模式并在模式vim之后替换所有内容

时间:2017-08-02 23:44:48

标签: regex vim

我有一个文件,里面有这样的内容:

size is X1 Identifier is Y1
size is X1 Identifier is Y1
size is X1 Identifier is Y1

我想重新启动文件以便

Identifier is Y1 size is X1 
Identifier is Y1 size is X1 
Identifier is Y1 size is X1 

我如何使用vim find& amp;更换?或者vim中的任何其他功能?

4 个答案:

答案 0 :(得分:6)

使用捕获组并切换两个组

%s/\v(.*) (I.*)/\2 \1

答案 1 :(得分:4)

如你所说“或vim中的任何其他功能”,我将通过录制宏来提供替代方案。我个人喜欢使用宏来做这样的事情,因为你执行一次你想做的动作,这有助于你仔细思考你想要的东西,然后根据你的需要重复同样的事情。

几乎可以肯定,这种方法比以下更有效,但希望这是一种相当简单的方法。

从第一行的任意位置开始。

q a (开始在注册a中录制宏 - 您可以用a替换任何其他字母)

0 (移至行首)

接下来,执行您要用于删除行的第一部分的任何命令,例如: 3 d w - 如果你需要更复杂的规则来识别要移动的线的部分,这就是你要做的事情。

$ (移到行尾)

a SPACE ESC p (在行尾添加一个空格,然后粘贴文本我们之前删除了)

j (向下移动一行,所以当我们完成宏的运行时,我们就在下一行)

q (停止录制)

完成此操作后,第一行应处于您想要的状态,光标将位于第二行。要从当前位置开始重复上述操作,请执行以下操作:

@ a (或您在第一步中选择的任何字母代替a)。

答案 2 :(得分:2)

我没有那么多使用vim,但你要搜索的术语是"正则表达式捕获组"几乎存在于每个正则表达式实现中。 Capture组为您提供匹配模式的部分,并让您根据需要重新组织它们。

这是一个可能包含你答案的问题:

Similar question

答案 3 :(得分:2)

:%s/\(size is \w*\) \(Identifier is \w*\)/\2 \1/g 这有效。我假设您标记为X1Y1的内容可以是任何字词,因此\w*

相关问题