Vim 专家:如何根据两个数字在一定范围内查找数字?例如“777”匹配“667:888”

Vim 专家:如何根据两个数字在一定范围内查找数字?例如“777”匹配“667:888”

我需要使用 Vim 在文本中搜索数字。我需要查找的数字通常在基于两个数字的范围内,并且我需要基于单个数字匹配该范围。

例如,在我的文件中有三行:

lorem ipsum 2100:2340 悲伤

乱码假文 17430:17437

53 富吧

搜索2277将会匹配,2100:2340因为它是 >=2100和 <= 2340。搜索将会在 的行上53匹配。53foo bar

范围的右侧始终有较大的数字,例如,在这种情况下,200:100 不是有效范围。同一行上会有多个范围。

如何用 Vim 实现这一点?

(不使用其他工具的原因仅仅是因为我使用 Vim,我喜欢 Vim,我需要经常使用它来编辑行。使用一些 shell 脚本不够有效)

答案1

  1. 搜索\<42\>\|\<\d\+:\d\+\>。这将捕获精确数字(42)和任何范围。
  2. 抓取当前匹配 ( expand('<cWORD>'))。
  3. 如果不是确切的数字,则解析为开始和结束数字(split(range, ':'))。
  4. 将精确数字与开始和结束进行比较,以确定它是否在其中。
  5. 报告结果并继续搜索。

相关内容