Vim实用技巧系列 - 搜索
最近发现了一个很好的VIM资源,best of vim tips, 展示了一系列很有用的vim 技巧。博主会逐个翻译介绍这些技巧。
来源: http://rayninfo.co.uk/vimtips.html
本篇:VIM搜索有关的技巧
" *最佳搜索技巧* /joe/e : 搜索joe并且将光标置于匹配单词末尾。若不加/e,则光标位于匹配单词开头 3/joe/e+1 : 搜索第三个joe并且将光标置于匹配单词末尾+1 /joe/s-2 : 光标置于匹配单词开头-2的位置 /joe/+3 : 搜索joe并且光标下移3行 /^joe.*fred.*bill/ : 查找依次包含有joe, fred, bill这三个单词的字符串,几个单词之间可以有任何内容。joe必须位于行的开头 /^[A-J]/ : 查找以A到J之间字母开头的行 /begin\_.*end : 在多行中查找依次包含begin和end两个单词的字符串,两个单词之间可以有任何内容。 /fred\_s*joe/ : 同上。但是限制两个单词之间只能有空白字符 (white space). /fred\|joe : 查找FRED或者JOE,两个单词中有一个匹配即可 /.*fred\&.*joe : Search for FRED AND JOE in any ORDER! /\<fred\>/ : 查找fred这个单词,不能使afred, freda, 或者afreda,只能是fred /\<\d\d\d\d\> : 查找四个数字,不多不少 /\D\d\d\d\d\D : 同上,但是需要数字前后都有空白字符 (white space). /\<\d\{4}\> : 同上 /\([^0-9]\|^\)%.*% : 查找以非数字开头或者位于行首的字符串。博主表示也没太搞懂那两个百分号是啥意思。原文是Search for absence of a digit or beginning of line " 查找空行 /^\n\{3} : 查找三个空行 /^str.*\nstr : 查找连续两个以str开头的行 /\(^str.*\n\)\{2} : 同上 " 利用正则表达式中的存储,也就是变量。下面这个命令中\2表示joe,\1表示fred /\(fred\).*\(joe\).*\2.*\1 " 正则表达式重复次数。下面命令表示重复8次 /^\([^,]*,\)\{8} " 可是模式下的搜索、查找 :vmap // y/<C-R>"<CR> : 查找高亮字符串 :vmap <silent> // y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> : 查找带有特定字符的高亮字符串 " \zs and \ze regex delimiters :h /\zs /<\zs[^>]*\ze> : 查找tag的内容,忽略tag " zero-width :h /\@= /<\@<=[^>]*>\@= : 同上 /<\@<=\_[^>]*>\@= : 在多行中查找tag " 在多行中搜索、查找, \_ 代表多行 /<!--\_p\{-}--> : 查找多行的注释 /fred\_s*joe/ : 多行中查找两个单词,单词之间可以有空白符 /bugs\(\_.\)*bunny : 多行中查找两个单词,单词之间可以有任何字符 :h \_ : 查看帮助 " 查找光标位置处的子程序、函数的定义 :nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR> " 多文件查找 :bufdo /searchstr/ : 通过:rewind来重新开始查找 " 更好的多行查找,但是具有欺骗性 :bufdo %s/searchstr/&/gic : 输入n到下一个,输入a停止 " 查找没有反斜杠的URL ?http://www.vim.org/ : 利用了反向搜索,很聪明。 " 指定你不想查找的内容 /\c\v([^aeiou]&\a){4} : 查找四个连续的辅音字母 /\%>20l\%<30lgoat : 在第20行到第30行之间查找goat /^.\{-}home.\{-}\zshome/e : 查找一行中第二次出现的home :%s/home.\{-}\zshome/alone : 在所有行中替换home的出现。博主没看懂,原文是 Substitute only the occurrence of home in any line [N] " 在不含有tongue的行中查找str ^\(.*tongue.*\)\@!.*nose.*$ \v^((tongue)@!.)*nose((tongue)@!.)*$ .*nose.*\&^\%(\%(tongue\)\@!.\)*$ :v/tongue/s/nose/&/gic 'a,'bs/extrascost//gc : 技巧,将搜索范围限制在两个标记(marker)之间