regex - vim 搜索不以特定字符串开头的行
问题描述
我有一个包含数十万行以日期开头的文件,例如
2021-02-22...
但是一些奇怪的行并不是这样开始的。我的目的是编写一个宏来找到它们并将它们与上面的行连接起来。
如何从 vim 中搜索这些行?
例如,如果我想在 vim 中找到下一个匹配行,我会输入
/^2021
它会带我到以“2021”开头的下一行
我想这样做,但要搜索下一个不匹配的行。
解决方案
我的目的是编写一个宏来找到它们并将它们与上面的行连接起来。
这种操作通常通过以下方式完成: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 /\(
推荐阅读
- javascript - 登录表单无法使用基于用户角色的身份验证和重定向呈现
- angular - 在 Angular 中使用 KeyCloak 令牌登录
- php - PHP减少图像的文件大小
- c# - Asp.net core web api调用简单中间件的Use()扩展方法
- c# - ssh.net throw 操作会话已超时并卡住
- python-3.x - 从不同的路径导入模块(不是文件)
- xamarin.forms - GroupShortNameBinding 添加了一个要点 - 如何删除
- debugging - 编译错误 Sandboxie Open Source v5.40
- python - QTableView 搜索并突出显示项目
- javascript - TouchableOpacity 覆盖其他按钮