首页 > 解决方案 > vim 搜索不以特定字符串开头的行

问题描述

我有一个包含数十万行以日期开头的文件,例如

2021-02-22... 

但是一些奇怪的行并不是这样开始的。我的目的是编写一个宏来找到它们并将它们与上面的行连接起来。

如何从 vim 中搜索这些行?

例如,如果我想在 vim 中找到下一个匹配行,我会输入

/^2021

它会带我到以“2021”开头的下一行

我想这样做,但要搜索下一个不匹配的行。

标签: regexsearchvim

解决方案


我的目的是编写一个宏来找到它们并将它们与上面的行连接起来。

这种操作通常通过以下方式完成:help :global

:g!/<pattern>/<command>

在不匹配<command>的每一行上执行。<pattern>

在您的情况下,它看起来像这样:

:g!/^2021/-j

在哪里……</p>

  • ^2021是你的模式,
  • -j首先将地址设置为上面的行,然后将其与下一行连接起来。

您可能会发现这种替代方法更直观:

:g!/^2021/norm! kJ

它本质上使用了等效于 的正常模式:-j

如果您在该文件中有几年,请考虑一个简单的替代方案:

:g!/^\(2021\|2020\|2019\)/-j

或更通用的模式:

:g!/^\d\d\d\d-\d\d-\d\d/-j

在这里,您不必尝试变得聪明,使用量词和负面的后视和东西。

参考:

:help :global
:help :range
:help :join
:help :normal
:help k
:help J
:help /^
:help \d
:help /\|
:help /\(

推荐阅读