如何用\\代替`\ norm {some string}一些字符串\ |`快速吗?

时间:2019-03-24 21:43:03

标签: vim replace

我正在用vim编辑markdown文件。该文件存在许多字符串\norm{ some string }。我想用\| some string \|代替它们。有没有快速的方法?非常感谢。

Find and replace strings in vim on multiple lines中的答案无法回答我的问题。它只是谈论一般替换一条线和多条线。在这里,我想替换一个周围环境,并将字符串保留在周围环境中。

2 个答案:

答案 0 :(得分:1)

您要查找的是所谓的捕获组和反向引用。如果没有嵌套的表单(内部的大括号本身并不意味着问题)并且跨多行的表单,则快速解决方案可以是:%s/\\norm {\(.*\)}/\\|\1\\|/g

替换部分中的\1表示由\(.*\)捕获的组,即最外面的花括号对内的原始内容。参见例如http://www.vimregex.com/#backreferences了解更多。

答案 1 :(得分:0)

您还可以使用宏来完成所需的操作。

将光标放在具有您要替换的图案的第一行上。然后开始录制宏:

qq0ldwr|$xi\|ESCjq

含义:

qq  = start recording a macro (q) in register q
0   = move to the beginning of the line
l   = move one char to the right
dw  = delete the word
r|  = substitute what is under the cursor with a "|"
$   = move to the end of line
x   = delete last char of the line
i   = insert mode
\|  = insert chars "\|"
ESC = exit insert mode
j   = move to next line
q   = stop recording

使用以下命令执行宏:

@q

再次执行宏:

@@

根据需要继续执行多行,或者使用:

<number>@@
ex. 100@@

要执行宏 number 次。