【发布时间】:2012-04-29 00:19:56
【问题描述】:
我有这个带有数字的文本:
My numbers are 04, and 0005
My numbers are 05, and 0006
My numbers are 06, and 0035
My numbers are 07, and 0007
My numbers are 08, and 0009
这是我一直用来增加或减少选择/块选择/列中数字的代码: 体育将上述文本中的最后 4 个数字加 8:
'<,'>s/\%V\<\d\{4}\>/\=submatch(0)+8/g
但我今天注意到它做了一些奇怪的事情。 这是输出:
My numbers are 04, and 13
My numbers are 05, and 14
My numbers are 06, and 37 <---
My numbers are 07, and 15
My numbers are 08, and 17
- 它会删除前导零(如果有前导零,我想保留它们 如果没有前导零,则不要添加它们)
- 它将所有数字都加了 8,除了 37,它加了 2。(为什么?)
谁能帮我找到一个正则表达式来添加/减去数字 从选择(或块选择)而不丢失前导零的?
注意:
我注意到 Control A + Control x 保留前导零并按照我的意愿完成工作,但是:
- 我已经看到它不能用于替代命令 ('s/)
- 我不知道如何添加 p.e. 200 到一个数字列表 (200 x ?)
【问题讨论】:
-
如果有任何帮助,我更喜欢做这样的事情的方式是编写一个外部过滤器(例如,在 perl 中),然后在块上使用 !/path/filter.pl。这使得问题更容易解决,并且过滤器易于重用和修改。
标签: search vim numbers increment decrement