vim regex:根据位置删除字符

时间:2013-09-24 14:43:42

标签: regex vim

这类似于问题VIM: insert or delete data based on position

我试图在文件的每一行中替换(而不仅仅是插入)位置7处的所需文本。基于上述问题解决方案中提供的正则表达式,我尝试了:

a. %s/\%=7c/text/  (failed error message - illegal character)
b. %s/\%7c/text/g   (says correct amount of lines / changes were made BUT blank space is still there after "text")
c. %s/\%7c/text/ (same as b)

3 个答案:

答案 0 :(得分:3)

/%7c将插入字符7

您希望您的匹配符合以下内容,以便包含下一个字符:

%s/\%7c./text/

答案 1 :(得分:2)

要添加Bob Vale的正确答案,\%c原子是零宽度匹配。也就是说,它仅限制匹配(此处:到字符位置),但不会消耗任何字符。你需要通过在其后面放置一个相应的原子来做到这一点(这里:.将匹配任何字符)。比较着名的\<原子的行为相同。

非ASCII编码的注意事项

有一点需要注意:\%c匹配基础表示的字节数,因此当存在非ASCII字符时,它将无法按预期工作。您可能真的对屏幕列感兴趣(当匹配前面有<Tab>字符时,这也很重要:它计为一个字节,但屏幕列宽1到8之间)。 Vim调用此虚拟列并为其设置\%v原子。

答案 2 :(得分:0)

我发现使用visual block mode更容易用于那种事情(我很少有机会记住零宽度表达式语法)。