Vim高级替换一则——行号获取

VIM 的替换功能比较强大,眼花缭乱的正则表达式,还有函数替换都是非常牛的,本文介绍一下如何使用 VIM 的函数进行替换「相关链接:1、 vi/vim使用技巧: 替换的巧妙使用(1) ;2、 vi/vim使用技巧: 替换的巧妙使用(2) 」。最后效果:
http://kosal.info/mp3/mp3-1.mp3
http://kosal.info/mp3/mp3-2.mp3
http://kosal.info/mp3/mp3-3.mp3
...
http://kosal.info/mp3/mp3-480.mp3
http://kosal.info/mp3/mp3-481.mp3
http://kosal.info/mp3/mp3-482.mp3原始文本:
http://kosal.info/mp3/mp3-1.mp3在正常模式下输入:Y481p,这样就得到了如下内容:
http://kosal.info/mp3/mp3-1.mp3
http://kosal.info/mp3/mp3-1.mp3
http://kosal.info/mp3/mp3-1.mp3
...
http://kosal.info/mp3/mp3-1.mp3
http://kosal.info/mp3/mp3-1.mp3
http://kosal.info/mp3/mp3-1.mp3总共是482行。按“:”进入命令模式,输入:%s/-\zs\([0-9]\)\ze/\=line(".")  ,回车得到最终效果。命令解释:
%s 正则替换
\zs 匹配任何位置,并将匹配起始处置于该处: 下一个字符将是整个匹配的第一个字符。「:help \zs」
\ze 匹配任何位置,并将匹配结尾处置于该处: 前一个字符将是整个匹配的最后一个字符。「:help \ze」
line(".") 光标所在的行号「:help line」
\= 执行后面的表达式「:help :\=」现在深入学习替换功能。比如在最终的效果前加入一个行号,如:
1 http://kosal.info/mp3/mp3-1.mp3
2 http://kosal.info/mp3/mp3-2.mp3
3 http://kosal.info/mp3/mp3-3.mp3
...
480 http://kosal.info/mp3/mp3-480.mp3
481 http://kosal.info/mp3/mp3-481.mp3
482 http://kosal.info/mp3/mp3-482.mp3最开始俺使用了如下的命令实现:
:%s/^/\=line('.').' '然后又想到了 let 函数:
:let n=1 | g/http/s/^/\=n.' '/ | let n+=1google了一下发现另外几种方法「 链接 :inserting line number into file」:
1 :g/^/exec "s/^/".strpart(line(".")." ", 0, 4)
2 :%s/^/\=strpart(line(".")." ", 0, 5)1的命令解释「 链接 」:
line(".")." " number of the current line plus four spaces
strpart("123 ", 0, 4) first four characters ("123 ")

"s/^/123 " substitute the beginning of the line with "123 "这里俺有一个地方不是很理解,即 "s/^/". —— 谁给解释解释?


from:http://hi.baidu.com/asnahu/item/3da7172546a6920b76272c88

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值