2

这类似于问题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)
4

3 回答 3

3

/%7c在字符 7 处插入

你会希望你的匹配如下,以便它包含下一个字符:

%s/\%7c./text/
于 2013-09-24T14:46:32.950 回答
2

为了补充 Bob Vale 的正确答案,\%c原子是零宽度匹配。也就是说,它只限制匹配(这里:到字符位置),但不消耗任何字符。您需要通过在其后面放置一个相应的原子来做到这一点(这里:.将匹配任何字符)。更为人所知的\<原子表现相同。

非 ASCII 编码的注意事项

有一个警告:\%c匹配底层表示的字节数,因此当有非 ASCII 字符时它不会按预期工作。您可能实际上对屏幕列<Tab>感兴趣(当匹配前面有一个字符时,这也很重要:它计为一个字节,但屏幕列的宽度在 1 到 8 之间)。Vim 调用这个虚拟列并拥有\%v它的原子。

于 2013-09-24T14:58:20.470 回答
0

我发现对这类事情使用可视块模式更容易(我几乎没有机会记住零宽度表达式语法)。

于 2013-09-24T16:12:13.080 回答