查看文章
 
Vim之删除重复行
2010年01月10日 星期日 0:13

题注:本文关于Vim的删除文本中的重复行。

最近开始使用Vim,感觉此乃外人间之神器,怪不得那么多Vimer对其偏爱有加。现在说说文本中重读行删除问题。在众多的编辑器中Vim对正则的支持估计是最强大的了,很多高级的正则表达式在Vim中都是支持的。以下是我的解法:

:%s/\(.*\)\n\1/\1\r/g
:g/^$/d

这里需要两个命令,后再http://vim.wikia.com/wiki/Uniq_-_Removing_duplicate_lines找到了我的加强版:

:g/^\(.*\)$\n\1$/d
:g/\%(^\1$\n\)\@<=\(.*\)$/d

两者都是前面的命令和我的相似,它删除的是重复项的前面一项;后面的命令删除的重复项的后面的内容。注意两个命令独立的,可以分别使用。对于g命令不是很熟悉,它是一个全局命令,以后会有全面介绍。

第二个命令的解释:

g//d <-- Delete the lines matching the regexp
\@<= <-- If the bit following matches, make sure the bit preceding this symbol directly precedes the match
\(.*\)$ <-- Match the line into subst register 1
\%( ) <--- Group without placing in a subst register.
^\1$\n <--- Match subst register 1 followed by end of line and the new line between the 2 lines

以上已经说得很明白了,不需要额外解释什么了。


类别:Vim||添加到搜藏 |分享到i贴吧|浏览(1760)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu