如何在vim中反向搜索和更换

如何在vim中反向搜索和更换,vim,Vim,我有一个包含大量0的大文件,如: 000000000 亿 如何实现反向搜索和替换?如果我想用0011替换0000,那么操作的输出应该是: 000110011 00110011您不能反向替换。一个技巧是(在你的例子中)给出一个搜索四个零的模式,在没有其他零的情况下结束 我相信还有更好的,但是关于这个把戏有以下几点: :%s/\v\zs0000\ze(0000)*([^0]|$)/0011/g 它匹配四个零(\z0000\ze),后跟一个可选的n*4个零序列((0000)*),后跟除零以外的任何字

我有一个包含大量0的大文件,如: 000000000 亿

如何实现反向搜索和替换?如果我想用0011替换0000,那么操作的输出应该是: 000110011
00110011

您不能反向替换。一个技巧是(在你的例子中)给出一个搜索四个零的模式,在没有其他零的情况下结束

我相信还有更好的,但是关于这个把戏有以下几点:

:%s/\v\zs0000\ze(0000)*([^0]|$)/0011/g

它匹配四个零(
\z0000\ze
),后跟一个可选的n*4个零序列(
(0000)*
),后跟除零以外的任何字符(
([^0]|$)
:字符或eol)

您在使用Linux吗?在这种情况下,这里有一个简便的解决方案:

  • 反转每行(使用
    rev
    外部命令)
  • 应用您的模式(反转后)
  • 恢复每行的正确顺序
你应该一步一步地尝试一下:

:%!rev
:%s/0000/1100/g
:%!rev

希望能有所帮助。

零块的右端是否锚定?在您的示例中,第一个块以空格结尾。第二个可能在生产线的末端。或者在您的实际文件中它不是可预测的吗?块的结尾是不可预测的,它可以是1个或多个空格或行的结尾。谢谢,这非常有帮助