分享
 
 
 

vim 小技巧 : 行数的显示与利用

王朝other·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

以前有人问过我,有没有什么方法可以在程式的每一行前面补上所在的行数?我的答案是:

cat -n input_filename > output_filename

他又问「如果没有 cat 怎么办?可以用 vim 完成吗?」因为我所提供的方法对於 Un*ix 的使用者来说是非常方便的,但是对其他作业环境的使用者可就未必了。那时候我想了一下,总觉得需要一个计数器,从头开始算,然后把数字补在每一行的前面。虽然说 vim 有提供 :set nu 的功能,但是在windows 上你却不能把它一行行 copy 下来用。不想搞程式,又想要一行解决,有没有呢?

答案是必须要靠 vim 内建的函数来帮忙,也就是今天介绍的 line() 和 submatch()。

我们先来看答案:

:%s/^.*$/\=line(".") . " " . submatch(0)/g

在 vim 里面, line() 就是用来代表行数的。而line()里面的 "." 则用来表示目前游标所在的地方,换言之,也就是处理到哪一行游标就在那。而 submatch(0) 则是用来表示前面所寻找的整个字串(pattern),而submatch(1)的话,则用来表示第一个以 \(…\) 夹起来的子字串。

不过由於我们所采用的是取代 s,s 的语法本来是 s/pattern1/pattern2/option,但是它提供在 pattern2的地方可以作一些运算。但是开头必须要用 "\=" 来开始,否则就视之为字串,而且在这个情况下,\1 \2 这种特殊字串所代表的特殊意义都不能使用。一些细节你可以参考

:h sub-replace-expression

所以答案里面的 pattern2 的部份就是先用 \= 做开始,表示要做运算,「”」这个符号夹起来的表示字串,而字串要和运作的结果相连的话,要用「.」来接。如果你的字串需要「”」这个符号,则用「\」补在前面,也就是变成「\”」。

评论:

1 若只是这功能的话, 我想用 :%s/^/\=line(".")." "/ 应该会简单一点吧…

2 如果行号想靠右对齐的话,可以用下面这一行 (假设以五个字元对齐)

:%s/^/\=printf("%5d ", line("."))/g

3 加加行号应该是这样吧.

:g/^/exec "s/^/".strpart(line(".")." ", 0, 4)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有