vim 插入行号到文件

http://blog.csdn.net/linxing927/article/details/16961197

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[09]\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/^/". —— 谁给解释解释?

posted @ 2016-08-18 16:26  岁月长河  阅读(1053)  评论(0编辑  收藏  举报