我需要使用 Vim 在文本中搜索数字。我需要查找的数字通常在基于两个数字的范围内,并且我需要基于单个数字匹配该范围。
例如,在我的文件中有三行:
lorem ipsum 2100:2340 悲伤
乱码假文 17430:17437
53 富吧
搜索2277
将会匹配,2100:2340
因为它是 >=2100
和 <= 2340
。搜索将会在 的行上53
匹配。53
foo bar
范围的右侧始终有较大的数字,例如,在这种情况下,200:100 不是有效范围。同一行上会有多个范围。
如何用 Vim 实现这一点?
(不使用其他工具的原因仅仅是因为我使用 Vim,我喜欢 Vim,我需要经常使用它来编辑行。使用一些 shell 脚本不够有效)
答案1
- 搜索
\<42\>\|\<\d\+:\d\+\>
。这将捕获精确数字(42
)和任何范围。 - 抓取当前匹配 (
expand('<cWORD>')
)。 - 如果不是确切的数字,则解析为开始和结束数字(
split(range, ':')
)。 - 将精确数字与开始和结束进行比较,以确定它是否在其中。
- 报告结果并继续搜索。