vim小技巧: 计算有多少个搜寻关键字
http://itpx.eol.cn 来源: 作者:中国IT实验室 2010-06-09 大 中 小
在看过 vim 的全域指令和 search 指令之後,你会不会也会想自己还有什麽需求可以叫 vim 做的呢?
今天我和布丁长辈还有DK长辈聊天的时候就讲到一个问题:我可不可以知道到底这份文件有多少个我想要搜寻的字串?
当然啦,你如果会 vim 的全域指令你可能可以用 :g/pattern/p 之後,用 copy 的方式或是其他指令的组合把比对出来的东西存到另外一个档案去,然後再用其他的工具(像是wc)计算行数。不过,这个方法,不够方便。
比较辛苦一点的方式也可以用 /pattern 然後自己按 n 一个个算,不过… 我想可能会先算到疯掉。
难道 vim 就只能这样了吗?
忘了是DK长辈还是布丁长辈说可以写程式来算。不过 vim 的 script 写法,我打算到後面再写。我心里想的是,应该有一行就可以解决的方法啊!
在 vim 里面遇到问题的时候有两个方式,第一个就是 :h 然後後面跟上你猜可能会有答案的关键字。不过这个方式我今天用了好几次,感觉除了写程式别无他途。可是,我就是不想写程式。第二个方法就是到 www.vim.org 上找 tips 看,结果没两下就找到了这篇<Tip #860: count number of matches of a pattern>,後面的 comment 中有个人只用一行解决,看了就觉得「哎唷,怎麽就是没想到呢?」其实用 vim 编辑文件想这些怎麽样可以让自己少打点或是只用一行指令解决的过程是很有趣的。这个人用的方法很简单也很漂亮,但却要用到我们之前提过的取代指令 :s :
:%s/pattern/&/g
& 代表的意思就是用来表示前面比对的字串,所以做这个指令其实对档案本身并不会有什麽改变。但是由於做的是全域的取代置换, vim 会告诉你有从多少行中多少个字串被取代。轻轻松松很漂亮地用一行命令解决这个问题。
输入只有一行的命令:
结果就会出现在最後一行上,而且不会改变到档案本身:
免责声明:
① 凡本站注明“稿件来源:中国教育在线”的所有文字、图片和音视频稿件,版权均属本网所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发表。已经本站协议授权的媒体、网站,在下载使用时必须注明“稿件来源:中国教育在线”,违者本站将依法追究责任。
② 本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。