Best of VIM Tips(译注) - 连载6 查找(e)

[翻译]

" search for declaration of subroutine/function under cursor

" 查找光标下子程序/函数的声明

:nmap gx yiw/^/(sub/<bar>function/)/s/+<C-R>"<CR>

[注解]

                                                                                                    :help :nmap

                                                                                                    :help iw

                                                                                                    :help <Bar>

这个映射中的大部分内容在前面都介绍过。它的思路是先把光标下的单词拷贝到无名寄存器,然后在这个单词前加上sub前缀或function前缀进行查找。

nmap用来建立一个normal下的键映射。

iw则用来选择一个单词。其它的文本对象,可以通过“:help object-select”查询。

<bar>用来代表“|”字符,在map命令中经常会用到这种表示方法,详情参阅“:help <>”。

理解了这个键映射的原理后,你可以按自己的需要对其进行修改。

 

[翻译]

" multiple file search

" 多文件查找

:bufdo /searchstr/                : use :rewind to recommence search

                                   使用:rewind重新开始搜索

[注解]

                                                                                                    :help :bufdo

                                                                                                    :help :rewind

这个命令在缓冲区列表中的每个缓冲里执行查找。

:rewind命令会跳到参数列表的第一个文件。所谓参数列表,是指你在启动VIM时给出的多个文件名,详见“:help argument-list”。

 

[翻译]

" multiple file search better but cheating

" 更好的多文件查找技巧

:bufdo %s/searchstr/&/gic   : say n and then a to stop

                                    输入n然后输入a以停止查找

[注解]

                                                                                                    :help :s

                                                                                                    :help s//&

                                                                                                    :help :s_flags

这个命令颇具技巧,它实际上是用替换命令实现在多个缓冲区中查找。它用起来比上面的tip友好多了。

输入这条命令后,会挨个遍历每个符合项,需要结束查找时,按a。这个命令虽然查找起来方便,但一旦按a中途退出,就会进行替换,导致文件的改变标记被置位(文件实际内容并没发生变化,因为在替换时使用的是原内容)。

在后面的替换一节会详细介绍:s命令。

 

 [翻译]

" How to search for a URL without backslashing

" 如何不使用反斜线查找 URL

?http://www.vim.org/        : (first) search BACKWARDS!!! clever huh!

                             首先向上查找!!!聪明啊!!!

[注解]

                                                                                                    :help ?

在查找目录、或网站链接之类的字符串时,因为这些内容中含有“/”,如果用“/”命令查找,则需要对里面的“/”进行转义,很麻烦。

如果用“?”查找就可以绕开转义符,多省事!

如果要查找类似“c:/a/b/c/d/e”的字符串,这样做也许会简单些:/<C-R>=escape('c:/a/b/c/d/e', '/')

上面的<C-R>是需要按CTRL-R输入的。

 

[翻译]

" Specify what you are NOT searching for (vowels)

" 指定不要查找什么

//c/v([^aeiou]&/a){4}       : search for 4 consecutive consonants

                             查找4个连续的辅音字母

[注解]

                                                                                                    :help //c

                                                                                                    :help //v

                                                                                                    :help //a

这个正则式用来查找4个连续的辅音字母。

它运用了两个修辞用的元字符,“/c”表示对其后面的内容忽略大小写,“/v”表示会将其后的内容中所有 '0'-'9''a'-'z''A'-'Z' '_' 之外的字符都当特殊元字符对待,也就是说,“(”相当于“/(”,“&”相当于“/&”,“{”相当于“/{”;这样可以减少转义字符“/”的数目,输入起来方便多了。如果在“/v”后确实要用这些字符的本义,就需要在字符加转义字符“/”,以得到本义。

 

[翻译]

//%>20l/%<30lgoat           : Search for goat between lines 20 and 30 *N*

                             在第20行到第30行间查找goat

[注解]

                                                                                                    :help //%l

这个正则式在指定的行范围内查找。

/%>20l”表示大于20行,“/%<30l”表示小于30行。

 

[翻译]

/^./{-}home./{-}/zshome/e   : match only the 2nd occurence in a line of "home" *N*

                             只匹配一行中第二次出现的"home"

[注解]

这个正则式只匹配行中第二次出现的“home”,这个正则式中用到的元字符在前面都介绍过。

 

[翻译]

:%s/home./{-}/zshome/alone  : Substitute only the occurrence of home in any line *N*

                             只替换任意行中 (第二次)出现的"home"

[注解]

                                                                                                    :help :s

此命令替换该文件所有行中第二次出现的“home”。因为“:s”命令没有使用“g”选项,所以只替换行中第一个符合匹配的字符串。

因此,对于类似这样的行“my home directory is /home/easwy. His home directory is /home/test”,即使“home./{-}/zshome”中没有使用“^”来指定行首,它仍然只替换第二次出现的“home”。

 

[参考文档]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值