Vim - 向前看并向后看,以逃避未转义的反斜杠

时间:2014-02-10 01:02:10

标签: regex vim escaping

在vim中找到\未跟随的所有"个字符,而不是\ 并且不在\之前,并将其替换为\\

输入:

bla1 \ bla1
bla2\bla2
bla3\\bla3
bla4\"bla4
\bla5
bla6\

输出:

bla1 \\ bla1
bla2\\bla2
bla3\\bla3
bla4\"bla4
\\bla5
bla6\\

尝试了负面观察和前瞻的结合,但没有运气的情况3

%s/\\\@<!\\\("\)\@!/\\\\/g 

如果已有2个反斜杠,则不应添加第3个反斜杠 是否可以给出负前瞻2个字符而不是1个字符。 换句话说,说出A或B后面的内容,而不是后面的内容

2 个答案:

答案 0 :(得分:1)

好的,我想我已经解决了它

%s/\\\@<!\\["\\]\@!/\\\\/g 

说明:

\\\@<!        - not preceded by \
\\            - actual \ character 
["\\]\@!      - not followed by either " or \
/\\\\/g       - replace by \\    

答案 1 :(得分:0)

:%s/[^\\]\zs\\\ze[^"\\]/\\\\/g 

这会将您的输入更改为输出。而且我个人认为比周围的环境更容易理解。