当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 14 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求教:如何用vim递增替换。
帖子发表于 : 2011-04-15 17:50 

注册: 2011-04-15 15:52
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
比如说有
代码:
1.fdfdfadsf
2.dfdfdf
3.dfdfd  4.dfdf 5.dfd dg
6.dfd

这个文本文件,我想将1. 2. ...改成a2. a3. a4. ...这类序号。在vim中怎么处理呢?
最好是用g命令一行解决,脚本也行。多谢。 :em06


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-15 18:42 

注册: 2007-10-27 1:04
帖子: 403
送出感谢: 0 次
接收感谢: 1
%s/\ze\<\d\+\./a/ge


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-17 8:52 

注册: 2011-04-15 15:52
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
多谢sarrow。让我知道了\ze和\<
不过我不但想要:①数字前面加上一个前缀,
而且还想要②数字是要有一个代数运算处理(例如本例中的+1).
③递增处理1、2、3...,如果2、3、之间遇到4、就不管它。
可以在一行中解决吗?
//事件起因是在网上给老婆下了一些学习资料。想搞个排序。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-17 13:07 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
ytaome 写道:
多谢sarrow。让我知道了\ze和\<
不过我不但想要:①数字前面加上一个前缀,
而且还想要②数字是要有一个代数运算处理(例如本例中的+1).
③递增处理1、2、3...,如果2、3、之间遇到4、就不管它。
可以在一行中解决吗?
//事件起因是在网上给老婆下了一些学习资料。想搞个排序。

代码:
for


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-17 13:27 

注册: 2007-10-27 1:04
帖子: 403
送出感谢: 0 次
接收感谢: 1
不懂你说什么。特别是这一句:

> ③递增处理1、2、3...,如果2、3、之间遇到4、就不管它。

最好给一个转换前后对比的范例。

如果仅仅是递增1的话:

%s/\<\d\+\ze\./\='a'.str2nr(submatch(0) + 1)/ge


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-17 22:07 

注册: 2011-04-15 15:52
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
原文
代码:
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

可以实现这样的功能吗?
//表达含糊的地方还请见谅,一直以来说话就有问题没得救了。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-17 23:14 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
那些一行有多个数字的是什么?如果可以弄成每行一项的话排序倒是很简单。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-18 9:14 

注册: 2011-04-15 15:52
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
lilydjwg 写道:
那些一行有多个数字的是什么?如果可以弄成每行一项的话排序倒是很简单。

就是一些无序列的数字而已。


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-18 9:48 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
引用:
递增替换
我是被这名词忽悠进来的。


_________________
● 鸣学


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-18 16:00 

注册: 2008-06-21 17:20
帖子: 156
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
引用:
递增替换
我是被这名词忽悠进来的。


me 2


_________________
我的游记和相册:http://www.wensh.net


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-18 16:10 
头像

注册: 2008-05-03 1:53
帖子: 959
送出感谢: 19
接收感谢: 11
me 2 22


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-18 17:48 

注册: 2007-10-27 1:04
帖子: 403
送出感谢: 0 次
接收感谢: 1
没有想到不用循环的方法。按你的要求,基本就是纯手工操作了。
用法——另存为一个文档,然后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


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-19 11:30 

注册: 2011-04-15 15:52
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
我昨天想了想,其实只要global或者s命令的pattern部分能使用变量就可以了。后面的string部分可以用\=就好办了。
不晓得vim的正则表达式能不能包含变量。。


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 求教:如何用vim递增替换。
帖子发表于 : 2011-04-19 11:32 

注册: 2011-04-15 15:52
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
nickdgd 写道:
eexpress 写道:
引用:
递增替换
我是被这名词忽悠进来的。


me 2

不太明白,大家所说的递增替换是什么含义?莫非我的“递增替换”歧义了?


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 14 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译