![Vim 搜索和替换 - 正则表达式](https://linux22.com/image/89265/Vim%20%E6%90%9C%E7%B4%A2%E5%92%8C%E6%9B%BF%E6%8D%A2%20-%20%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.png)
我想执行搜索和替换。任何非数字之前的换行符应替换为制表符。我试过
%s/\n\D/\t/g
但它替换了换行符后面的单词的第一个字符,这不是我想要的,即
abcd
abcd
到
abcd bcd
我想a
在换行符之后保留。
答案1
你已经快到了,但是你的正则表达式正在替换换行符和带制表符的非数字。
如何用制表符替换后面跟有非数字的每个换行符和相同的非数字?
%s/\n\(\D\)/\t\1/g
转义有点混乱,但基本上你有一个围绕 的分组,\D
它将捕获任何非数字。然后引用 并将\1
其插入到选项卡之后。
答案2
一种方法是使用结束匹配标记:
%s/\n\ze\D/\t/
另一种方法是使用负前瞻:
%s/\n\d\@!/\t/
它们并不完全相同,第二个也将替换文件中的最后一个换行符。
答案3
我希望这能帮到您
:%s#\n.\D#\t#g