insertyou 发表于 2013-1-26 12:39:56

Best of VIM Tips(译注)

[翻译]
" 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”。
但是,正则表达式“\(\{3}\).*\1”却并不等同于“\{3}.*\{3}”。
因为“\1”代表第一个“\( \)”所匹配的内容,如果第一个“\( \)”匹配了“abc”,那么“\1”就代表“abc”;如果第一个“\( \)”匹配了“abb”,那么“\1”就代表“abb”。
显然正则式“\{3}.*\{3}”并不是这个含义。


[翻译]
" Repeating the Regexp (rather than what the Regexp finds)

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

/^\([^,]*,\)\{8}
[注解]
这个正则式是把“\( \)”间的元素重复8次,即相当于查找“^([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,”。
其中“([^,]*,”表示任意个非“,”的字符,后面紧跟着一个“,”。


[翻译]
"visual searching

" 可视模式下的查找

:vmap // y/<C-R>"<CR> : search for visually highlighted text
查找被高亮显示的文本

:vmap <silent> // y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> : with spec chars
高亮文本包含特殊字符

[注解]
:help v

这两个键映射用于在可视模式下查找被高亮显示的文本,如果高亮文本中包含特殊字符,需要使用第两种格式的键映射。
(使用二者任一)映射后,当你使用v或V选中一段文本后,再按“//”就可以查找这段文本。
以第二个映射为例进行讲解:
:help vmap

vmap 定义一个virsual的键映射

:help map-<silent>

<silent> 执行此映射时不回显

:help y

y 拷贝选中的内容到无名寄存器
/ 开始搜索
:help c_CTRL-R_=

<C-R>= 搜索的内容来源于一个表达式的结果
:help escape()

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

:help expr-register

@" 代表无名寄存器中的内容
'\\/.*$^~[]' 对这些特殊字符进行转义
:help key-notation

<CR> 回车
[参考文档]
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
页: [1]
查看完整版本: Best of VIM Tips(译注)