分页: 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命令一行解决,脚本也行。多谢。 :em06

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、就不管它。
可以在一行中解决吗?
//事件起因是在网上给老婆下了一些学习资料。想搞个排序。

代码: 全选

for

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
不太明白,大家所说的递增替换是什么含义?莫非我的“递增替换”歧义了?