Best of VIM Tips(译注) - 连载4 查找(c)

阅读更多

[翻译]

" finding empty lines 查找空行

/^\n\{3} : find 3 empty lines

查找 3 行空行

[注解]

:help /\n

这个正则表达式匹配三个连续的空行,也就是在行首位置有3个连续的换行符。

其中“\n”匹配换行符。

[翻译]

" using rexexp memory in a search

" 在查找中使用正则表达式存储

/\(fred\).*\(joe\).*\2.*\1

[注解]

:help /\1

:help /\2

在这个正则式中,“\1”代表与第一个“\( \)”间的子式的相同的字符串,“\2”为第2个,“\3”为第3个,以此类推,一直到“\9”。

所以对这个例子来说,它等同于“fred.*joe.*joe.*fred”。

但是,正则表达式“\([abc]\{3}\).*\1”却并不等同于“[abc]\{3}.*[abc]\{3}”。

因为“\1”代表第一个“\( \)”所匹配的内容,如果第一个“\( \)”匹配了“abc”,那么“\1”就代表“abc”;如果第一个“\( \)”匹配了“abb”,那么“\1”就代表“abb”。

显然正则式“[abc]\{3}.*[abc]\{3}”并不是这个含义。

[翻译]

" Repeating the Regexp (rather than what the Regexp finds)

" 重复正则表达式(不管这个正则表达式查找什么)

/^\([^,]*,\)\{8}

[注解]

这个正则式是把“\( \)”间的元素重复8次,即相当于查找“^([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,”。

其中“([^,]*,”表示任意个非“,”的字符,后面紧跟着一个“,”。

[翻译]

"visual searching

" 可视模式下的查找

:vmap // y/" : search for visually highlighted text

查找被高亮显示的文本

:vmap // y/=escape(@", '\\/.*$^~[]') : with spec chars

高亮文本包含特殊字符

[注解]

:help v

这两个键映射用于在可视模式下查找被高亮显示的文本,如果高亮文本中包含特殊字符,需要使用第两种格式的键映射。

(使用二者任一)映射后,当你使用vV选中一段文本后,再按“//”就可以查找这段文本。

以第二个映射为例进行讲解:

:help vmap

vmap 定义一个virsual的键映射

:help map-

执行此映射时不回显

:help y

y 拷贝选中的内容到无名寄存器

/ 开始搜索

:help c_CTRL-R_=

= 搜索的内容来源于一个表达式的结果

:help escape()

escape() 把参数1中所包含的特殊字符(由参数2指定)前加转义符\

:help registers

:help expr-register

@" 代表无名寄存器中的内容

'\\/.*$^~[]' 些特殊字符进行转义

:help key-notation

回车

[参考文档]

1. http://www.rayninfo.co.uk/vimtips.html

2. http://groups.google.com/group/Vim-cn/msg/f72fba0645955101?

3. VIM帮助文件

4. http://vimcdoc.sourceforge.net/

[尾记]

本文可以自由应用于非商业用途。转载请注明出处。

原文链接:http://blog.csdn.net/easwy

你可能感兴趣的:(C,C++,C#,vim,正则表达式)