在vi vim中使用正则表达式与 普通perl正则的区别?

参考这篇文章很好

vim中的正则表达式常用的命令有种, 即搜索和替换
/: 搜索
😒 替换

在vim中的正则表达式和perl编程的正则表达式还是有区别的:

正则表达式中的内容包括:
字面字符... 按原样查找
元字符:
表示类别的: \d, \D, \w, \W , \t, \s \S, 以及一些特殊符合的转义表示如: \, ]
表示数量的: 除了*,不需要加反斜线外, 其余的都要加: +, ? {m,n}...
表示位置的: ^, $ , < (单词开始) >单词结尾
表示分组的 : ( , )

% 和g的区别:

%: 表示的是 整个文档的范围, 是放在命令 :s的前面. 对整个文档进行替换
g: 表示的是 在一行 的范围, 放在命令的最后面. 表示 在同一行内, 进行多次替换...

在virc vimrc等中, 可以设置/etc/virc /etc/vimrc配置文件中设置:

set magic: 表示 除了四个元子符: ^ $ . * 其他的元字符都要进行转义

---------------------------------==
关于vim正则中的 "空白字符" 的处理
[参考文章:关于空白字符的 举例](http://www.cnblogs.com/ace9/archive/2011/04/29/2032669.html)

  1. 搜索的时候是\n, 而替换的时候是\r, 这是历史原因造成的

  2. 空白行 :一定要包含 换行符\n, 否则就匹配不到 空白"行".
    而且将会把每个字符分隔开来成为一行: %s/\s*/\r/ ## 这时候, 会匹配到0个空白字符

  3. 一定要 用分组将 空白字符和换行 括起来 进行 多次匹配, 否则, 即使是把 空白字符和 单独的\n 合在一起也不能达到 "删除空白行的目的"

    当加上分组 并用+ 表示数量的多个 进行分组匹配时, 才能删除空白行.

  4. 要删除行首的 注释符合 #:
    :%s/^#*//

***去掉所有的空白行:“:%s/\(\s*\n\)\+/\r/”。这回多了“\(”、“\)”、“\n”、“\r”和 “*”。“*”代表对前面的字符(此处为“\s”)匹配零次或多次(越多越好;使用“\*”表示单纯的“*”字符),“\n”代表换行符,“\r”代表回车符,“\(”和“\)”对表达式进行分组,使其被视作一个不可分割的整体。因此,这个表达式的完整意义是,把连续的换行符(包含换行符前面可能有的连续空白字符)替换成为一个单个的换行符。唯一很特殊的地方是,在模式中使用的是“\n”,而被替换的内容中却不能使用“\n”,而只能使用“\r”。原因是历史造成的,详情如果有兴趣的话可以查看“:help NL-used-for-Nul”。

posted @ 2016-06-02 11:09  noitanym  阅读(1271)  评论(0编辑  收藏  举报