我正在用vim编辑markdown文件。该文件存在许多字符串\norm{ some string }
。我想用\| some string \|
代替它们。有没有快速的方法?非常感谢。
Find and replace strings in vim on multiple lines中的答案无法回答我的问题。它只是谈论一般替换一条线和多条线。在这里,我想替换一个周围环境,并将字符串保留在周围环境中。
答案 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 次。