这类似于问题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)
答案 0 :(得分:3)
/%7c
将插入字符7
您希望您的匹配符合以下内容,以便包含下一个字符:
%s/\%7c./text/
答案 1 :(得分:2)
要添加Bob Vale的正确答案,\%c
原子是零宽度匹配。也就是说,它仅限制匹配(此处:到字符位置),但不会消耗任何字符。你需要通过在其后面放置一个相应的原子来做到这一点(这里:.
将匹配任何字符)。比较着名的\<
原子的行为相同。
有一点需要注意:\%c
匹配基础表示的字节数,因此当存在非ASCII字符时,它将无法按预期工作。您可能真的对屏幕列感兴趣(当匹配前面有<Tab>
字符时,这也很重要:它计为一个字节,但屏幕列宽1到8之间)。 Vim调用此虚拟列并为其设置\%v
原子。
答案 2 :(得分:0)
我发现使用visual block mode更容易用于那种事情(我很少有机会记住零宽度表达式语法)。