最近发现了一个很好的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.10.14 NOIP训练 猜数游戏(决策单调性优化dp)

    传送门 一道神奇的dp题. 这题的决策单调性优化跟普通的不同. 首先发现这道题只跟r−lr-lr−l有关. 然后定义状态f[i][j]f[i][j]f[i][j]表示猜范围为[L,L+i−1][L,L ...

  2. UVa 111 History Grading (简单DP,LIS或LCS)

    题意:题意就是坑,看不大懂么,结果就做不对,如果看懂了就so easy了,给定n个事件,注意的是, 它给的是第i个事件发生在第多少位,并不是像我们想的,第i位是哪个事件,举个例子吧,4 2 3 1, ...

  3. addEvent兼容版

    function addEvent(elem,type,handle){ if (elem.addEventlistener) { elem.addEventlistener(type,handle, ...

  4. DIV+CSS实战(五)

    一.说明 前面实现了关键词订阅模块,现在实现站点订阅模块,主要实现的是站点添加界面.站点添加界面里面实现一个提示框不在提示的功能(保存到cookie中),还有就是实现一个站点的选择框,包括输入文字自动 ...

  5. SetFocus (GetDlgItem (hwnd, idFocus))函数的各参数的具体含义

    Setfocus(HWMD hwnd):将窗口hwnd设置成获得焦点 GetDlgItem (hwnd, idFocus):此函数返回一个句柄 具体参数的含义: hwnd:包含该窗口标志位的对话框的句 ...

  6. DagScheduler 和 TaskScheduler

    DagScheduler 和 TaskScheduler 的任务交接 spark 调度器分为两个部分, 一个是 DagScheduler, 一个是 TaskScheduler, DagSchedule ...

  7. TCP/IP协议族分层

    协议族的分层抽象,一定意义上来说,每层敬职敬责的做自己的工作,同时也共同完成通讯协议的共同目标. 这是一个垂直划分的抽象层次,挺有意义. 1.链路层/数据链路层/网络接口层 操作系统中的设备驱动程序和 ...

  8. QTP之回放模式(ReplayType)

    QTP的回放模式有两种,如下所示: 1.  Event模式  --  事件跟踪 2.  Mouse模式 --   鼠标跟踪 Event模式就是我们平时默认用的模式,也就是事件,其实QTP的click方 ...

  9. 实例化MD5CryptoServiceProvider报错:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分

    System.InvalidOperationException: This implementation is not part of the Windows Platform FIPS valid ...

  10. asp.net excel导出功能

    以下是我在项目开发中所做的关于Excel导出功能,不足之处还望大家指正,相互学习 protected void btn_Export_Click(object sender, EventArgs e) ...