最近发现了一个很好的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)之间

Vim实用技巧系列 - 搜索的更多相关文章

  1. Vim实用技巧系列 - 代码注释

    在写代码时候,有时候需要临时注释掉一部分代码,之后还要取消这些注释.真麻烦.那么,用Vim怎么做这件事呢? 第一种方法,块模式.                 再次声明,本系列全部以windows下 ...

  2. Vim实用技巧系列 - 开篇

    作者使用Vim已经有一段时间了,深深觉得它是一个非常强大的编辑器,使用习惯之后效率很高.最大的缺点是学习曲线比较陡峭.因此作者希望分享一些自己在实际使用中的经验来帮助初学者,同时也帮助作者自己学习. ...

  3. Vim实用技巧系列 - tab和空格的转换

    有时候,我们会修改一些代码,而这些代码中的tab设定和我们自己的设定不一样.例如,我们自己的设定是以两个空格来代替tab,而要修改的代码则是使用tab.那么,我们应该怎样快速的将又有的tab转换为空格 ...

  4. Vim实用技巧系列 - 利用百度云和git实现vim配置多机共享

    Vim是一个强大的文本编辑器.良好的配置更能便利对Vim的使用.有时候,我们会在几台不同的电脑上使用Vim. 例如,我们可能在自己的电脑和公司的电脑上都安装了Vim. 有时候,我们需要实现,如果我们配 ...

  5. ###《VIM实用技巧》

    ###<VIM实用技巧> #@author: gr #@date: 2015-11-20 #@email: forgerui@gmail.com <VIM实用技巧>阅读笔记. ...

  6. vim实用技巧总结

    1. 单个文件内实用mark来帮助跳转以及一些宏操作.(注意:mark不能用于多文件之间的跳转)mch 设置宏,保存到ch标记(不是ch寄存器)'ch 跳转到标记的行首`ch 跳转到标记的字符处另:为 ...

  7. 很全面的WinRAR实用技巧系列 - imsoft.cnblogs

    WinRAR也可以管理我的桌面时间长了,桌面上堆的东西实在太多,平时该如何管理呢?安装了WinRAR的朋友可以请它来帮忙,用它管理清除无用的桌面文件或图标. 以XP系统为例,系统所在目录是“c:\wi ...

  8. 《Vim实用技巧》第2版读书笔记

    学习前的建议: 一.如果你需要一个功能强大的文本编辑器,速度飞快.使用方便.代码补全.编程强大.定制性强,Vim就是你需要的: 二.学习入门曲线陡峭,但是使用后期异常简单,效率超高: 三.号称可以跟上 ...

  9. vim实用技巧

    <1> 删除空格: :% s/ //gi    #正则为一个空格,替换为空,全局匹配. <2> 删除空行: :g /^\n*$/ d  #g为global  正则为:行开始+换 ...

随机推荐

  1. 2018.06.30 BZOJ3083: 遥远的国度(换根树剖)

    3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 512 MB Description 描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国 ...

  2. 2018.07.08 hdu1394 Minimum Inversion Number(线段树)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...

  3. Map的常用操作

    public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map. ...

  4. Google Map API申请

    https://code.google.com/apis/console 当然需要先有个Google账户登录. 然后需要建一个项目. 然后根据package+sha1码获取密钥key 然后就可以创建凭 ...

  5. VMware Workstation 12 OpenGL ES版本支持情况与设置

    概述 开始学习Opengl时,发现VMware Workstation虚拟机无法运行Opengl ES2.0的程序.后来,经过查找最终得知,是因为VMware Workstation11及之前的版本对 ...

  6. springmvc 开涛 生产者/消费者

    媒体类型: text/html, text/plain, text/xml image/gif, image/jpg, image/png application/x-www-form-urlenco ...

  7. Android-ColorsUtil工具类

    颜色工具类 public class ColorsUtil { private ColorsUtil() { throw new Error("Do not need instantiate ...

  8. LeetCode133:Clone Graph

    题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...

  9. 【WPF】UserControl 的 Load事件

    经过查看MSDN,总结下 UserControl 的 Load 事件: Q1:Load事件什么时候发生? 在控件第一次变为可见之前发生. Load事件发生在创建 UserControl 时,因此有些情 ...

  10. leetcode 杨辉三角

    给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [ ...