分页: 1 / 1
求教:如何用vim递增替换。
发表于 : 2011-04-15 17:50
由 ytaome
比如说有
代码: 全选
1.fdfdfadsf
2.dfdfdf
3.dfdfd 4.dfdf 5.dfd dg
6.dfd
这个文本文件,我想将1. 2. ...改成a2. a3. a4. ...这类序号。在vim中怎么处理呢?
最好是用g命令一行解决,脚本也行。多谢。

Re: 求教:如何用vim递增替换。
发表于 : 2011-04-15 18:42
由 sarrow
%s/\ze\<\d\+\./a/ge
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-17 8:52
由 ytaome
多谢sarrow。让我知道了\ze和\<
不过我不但想要:①数字前面加上一个前缀,
而且还想要②数字是要有一个代数运算处理(例如本例中的+1).
③递增处理1、2、3...,如果2、3、之间遇到4、就不管它。
可以在一行中解决吗?
//事件起因是在网上给老婆下了一些学习资料。想搞个排序。
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-17 13:07
由 lilydjwg
ytaome 写了:多谢sarrow。让我知道了\ze和\<
不过我不但想要:①数字前面加上一个前缀,
而且还想要②数字是要有一个代数运算处理(例如本例中的+1).
③递增处理1、2、3...,如果2、3、之间遇到4、就不管它。
可以在一行中解决吗?
//事件起因是在网上给老婆下了一些学习资料。想搞个排序。
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-17 13:27
由 sarrow
不懂你说什么。特别是这一句:
> ③递增处理1、2、3...,如果2、3、之间遇到4、就不管它。
最好给一个转换前后对比的范例。
如果仅仅是递增1的话:
%s/\<\d\+\ze\./\='a'.str2nr(submatch(0) + 1)/ge
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-17 22:07
由 ytaome
原文
代码: 全选
1.fdfdfadsf
2.dfdfdf
3.dfdfd 5.dfd dg 4.dfdf
6.dfd
想替换成:
代码: 全选
a2.fdfdfadsf
a3.dfdfdf
a4.dfdfd 5.dfd dg a5.dfdf
6.dfd
解决方法:
如果用
代码: 全选
for i in range(1,1000)
%s/..../.../gc
endfor
我还想问:
代码: 全选
let i=1 | g/??? | i+=1
可以实现这样的功能吗?
//表达含糊的地方还请见谅,一直以来说话就有问题没得救了。
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-17 23:14
由 lilydjwg
那些一行有多个数字的是什么?如果可以弄成每行一项的话排序倒是很简单。
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-18 9:14
由 ytaome
lilydjwg 写了:那些一行有多个数字的是什么?如果可以弄成每行一项的话排序倒是很简单。
就是一些无序列的数字而已。
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-18 9:48
由 eexpress
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-18 16:00
由 nickdgd
eexpress 写了:递增替换
我是被这名词忽悠进来的。
me 2
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-18 16:10
由 sunfish
me 2 22
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-18 17:48
由 sarrow
没有想到不用循环的方法。按你的要求,基本就是纯手工操作了。
用法——另存为一个文档,然后so。
" 需要设定一个其实值——当然也可以自己找。
if search('\<\d\.\D', 'cW')
let _reg_q_ = getreg('"')
normal yiw
let _number_ = str2nr(getreg('"'))
let _number_ += 1
execute "normal ciwa\<C-r>=string(_number_)\<CR>"
while search('\<'._number_.'\.\D', 'cW')
normal yiw
let _number_ = str2nr(getreg('"'))
let _number_ += 1
execute "normal ciwa\<C-r>=string(_number_)\<CR>"
endwhile
endif
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-19 11:30
由 ytaome
我昨天想了想,其实只要global或者s命令的pattern部分能使用变量就可以了。后面的string部分可以用\=就好办了。
不晓得vim的正则表达式能不能包含变量。。
Re: 求教:如何用vim递增替换。
发表于 : 2011-04-19 11:32
由 ytaome
nickdgd 写了:eexpress 写了:递增替换
我是被这名词忽悠进来的。
me 2
不太明白,大家所说的递增替换是什么含义?莫非我的“递增替换”歧义了?