VIM是被誉为非常高效的文本编辑软件。但是掌握并高效的使用是件有难度的事情。在VIM中进行快速的查找和替换是提高VIM使用效率的重要方法。下面是我在阅读VIM用户手册时整理的一些资料:

  1. 行内搜索。
    1. f命令可以进行行内搜索。输入fx可以找到下一个x字符。
    2. F命令可以在反方向进行行内搜索,输入Fx可以找到上一个x字符。
    3. t命令同样是进行行内搜索,但是光标停留在符合条件的字符的前面。输入tx使光标停留在下一个x字符的前面。
    4. T命令可以在反方向进行行内搜索,但是光标停留在符合条件的字符的下一个字符上。输入tx使光标停留在上一个x的后面的字符上。
    5. %可以搜索与之匹配的对应的()[]{}。这个功能对于书写程序特别有用。
  2. 全文的搜索。键入/后,光标进入VIM底部的命令行,这时就可以输入以/为开始的/搜索命令了。
    1. 最简单的查找。输入/string就可以查找string字符串。
    2. 继续查找。在第一次搜索后输入n将会继续进行上一次搜索,如果输入3n那么会找到后面第三个符合的字符串。大写的N会在反方向,也就是向上进行搜索。
    3. 向上搜索。输入?可以向上搜索。随后的n命令将会继续向上搜索,N向下搜索,其他和/一样。
    4. 对大小写的匹配。
      1. 在命令行输入:set ignorecase可以设置搜索以忽略大小写的方式进行。输入:set noignorecase可以设置搜索以匹配大小写的方式进行。默认的,将匹配大小写。这个默认设置可以在.vimrc中修改。
      2. 大小写智能匹配模式。输入命令:set ignorecase smartcase可以设置为智能大小写匹配模式。在这种模式下,如果你输入的字符串中至少包含一个大写字母,那么就会以大小写敏感模式进行搜索,否则以忽略大小写模式进行搜索。
      3. 在搜索命令中指定大小写。在几种大小写搜索模式中进行转换总要输入长长的一串指令,如果需要不断地转换模式,确实有些麻烦。所以你可以直接在搜索命令中指定大小写匹配模式。\c表示忽略大小写,而\C表示对大小写敏感。
    5. 查找当前词。一个简单的方法可以让你查找下一个和当前词一样的词,你不比输入/currentword,你可以直接按下*就可以查找下一个currentword。#可以让你向上查找同一个单词。
    6. 调整查找后的光标位置。
      1. 使用/string/3会使在光标转到找到string字符串的行下面的第3行。第1行从包含string的行算起。同样可以使用/string/-2来使光标停留在包含string的行的前面2行。
      2. 使 用/string/e可以使光标停留在string字符串的末尾而不是默认的第一个字符位置。/string/b则表示停留在string第一个字符的位 置,不过默认就是如此,我们不比多此一举。但是/string/b+2却可以使光标停留在string字符串的第二个字符的位置,这里是r。在e或者b的 后面+或者-数字,可以进一步调整光标的位置。
    7. 特殊字符。在搜索命令中,  .*[]^%/?~$这10个字符有着特殊意义,所以在使用这些字符的时候要在前面加上一个反斜杠/。而\e表示<esc>;\t表示<tab>;\r表示<cr>;\b表示<bs>。
    8. 匹 配换行或空格。使用\n可以表示一个换行;而\s表示匹配空白,注意是空白不是空格。\_s表示匹配换行或者空格;\_a表示匹配换行或者一个字母。比 如:/the\nword查找以the结束并且下一行以word开始的行的位置。/the\_sword查找the和word之间以空白或者换行分割的位 置。/the\_s\+word表示the和word之间可以有多个空白。\+的含义可以在后面找到。
    9. 限定词首或者词尾。\<可以限定找到是以指定字符串开始的单词。比如/\<the可以找到以the开始在字符串,但是会忽略在单词中间包含the的字符串。而\>则是限定必须是以指定字符串结尾的单词。
    10. 行首和行尾。输入/^string查找以string开始的行,并且光标停留在这个string的第一个字符。输入/string$则查找以string结束的行,并将光标停留在这个string的第一个字符。这个模式不会忽略前导或者后置的空格。
    11. 匹配任何一个字符。句号.可以匹配任何一个字符。例如/t.e可以找到the或者tae或者tue。
  3. 更加复杂的匹配模式。实际上,/搜索可以使用非常复杂的匹配模式。下面列出了其中一些复杂的匹配模式。
    1. 可重复的字符。
      1. 使用*表示它前面的字符可以重复多次或者0次。比如/be*可以匹配b,be,bee,beee等等。但是这也会包含b,因为e重复0后是空。如果要匹配诸如be,bebe,bebebe的字符串可以使用\(和\)把他们包括起来,形如:/\(be\)*。
      2. 使用\+来限定为重复至少一次到无数次。如:/be\+可以匹配be,bee,bee等等。
      3. 重复0次或者一次。\=可以指定重复0次或者一次。/strings\=表示匹配string或者strings。这在查找单词的复数形式特别有用.
      4. 指定重复的次数。\{n,m}可以指定重复n到m次。比如:/be\{2,4}将会匹配bee,beee,beeee。同样可以使用\{,4}表示匹配0到4次;\{4,}表示4次到无数次;\{4}表示重复4次。
    2. 匹配列表中的一个。使用一个以\|分割的列表,可以表示匹配列表中任何一项。比如/one\|two表示查找one或者two;/one\|two\|three表示查找one或者two或者three。
      1. 一个复杂的实例:/end\(if\|while\|for\)将会查找endif,endwhile以及endfor。
      2. 字符列表。使用[0-9]可以表示一个0到9范围的字符。比如/string[1-5]表示查找string1,string2,string3,string4,string5。当然也可以使用[a-z]表示字符a到z中间的一个。
      3. 特 殊的字符集合。使用\d也可以表示0到9的数字,这个选项可以代替[0-9]。\D表示非数字代替[^0-9];\x表示十六进制数代替[0-9a- fA-F];\X表示非十六进制数代替[^0-9a-fA-F];\s表示空白字符代替[ ] (<Tab> 和<Space>);\S表示非空白字符代替[^ ] (除<Tab> 和<Space>之外);\l表示小写字母代替[a-z];\L表示非小写字母代替[^a-z];\u表示大写字母代替[A-Z];\U表示 非大写字母代替[^A-Z]
  4. 搜索并替换。输入: [range]s/from/to/[flags]命令可以搜索匹配的字符串并且替换为指定的字符串。这是一个稍微复杂的命令。其中[range]是一个 可选项,用来指定搜索替换的范围。[flags]也是一个可选项,用来指定搜索替换的处理方式。所以这个命令的简单形式是:s/from/to/。
    1. 搜索替换的范围。如果没有指定范围,则只在当前行进行搜索替换。
      1. 在所有行进行搜索替换。范围符号%表示在所有行进行搜索替换。:%s/from/to/就是在全文查找from并替换为to。
      2. 在指定的行上进行搜索替换。:1,50s/from/to/表示在第1行和第50行之间(包括1和50行)进行搜索和替换。:45s/from/to/表示仅仅在第45行进行搜索和替换。而"1,$"行号范围和“%“是等价的。
    2. 处理方式。我现在使用的VIM默认的方式是无须确认。不过好像不同版本的默认的处理方式是不同的。
      1. 无须确认。方式符号g表示直接替换无须进行确认。:%s/from/to/g表示在全文中查找from并且直接全部替换为to。
      2. 列印。处理方式符号p表示在替换时列出每个被改变的行。手册中这么说,但是实际效果却让我很迷惑。

在VIM中进行快速的查找和替换的更多相关文章

  1. vim /vi中对字符串的查找并替换

    vi/vim 中可以使用 :s 命令来替换字符串.该命令有很多种不同细节使用方法,可以实现复杂的功能,记录几种在此,方便以后查询.    :s/vivian/sky/ 替换当前行第一个 vivian ...

  2. Node.js中针对中文的查找和替换无效的解决方法

    Node.js中针对中文的查找和替换无效的解决方法.   //tags的值: tag,测试,帖子 var pos1 = tags.indexOf("测"); //这里返回-1 ta ...

  3. VIM 技巧 (二)查找与替换

    今天和大家分享下  对于  vim 中 查找与替换方法 例如有一篇文章.中英文不限制. 用户如果想查找其中的文字或单词 在 win系统的Notepad中一般都时 ctrl + F 去查询 而在 vim ...

  4. 在 Excel 中使用正则表达式进行查找与替换

    在 Excel 中,使用 Alt+F11 快捷键打开 VBA 项目窗口,在左侧的工作表名称上点右键,选择查看代码,即可出出现右侧的代码编辑窗口 在代码窗口中输入以下代码: Private Sub Re ...

  5. 在JavaScript的数组中进行数组元素查找和替换(JS的indexOf等)

    <html> <head> <title> Extend JavaScript Array Method </title> <script lan ...

  6. 关于在vim中的查找和替换

    1,查找 在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车. Vim会跳转到第一个匹配.按下n查找下一个,按下N查找上一个. Vim查找支持正则表达式,例如/vim$匹配行尾的 ...

  7. 在 Vim 中优雅地查找和替换(转)

    总有人问我 Vim 中能不能查找,当然能!而且是超级强的查找! 这篇文章来详细介绍 Vim 中查找相关的设置和使用方法. 包括查找与替换.查找光标所在词.高亮前景/背景色.切换高亮状态.大小写敏感查找 ...

  8. 在 Vim 中优雅地查找和替换

    原文更好看链接http://harttle.com/2016/08/08/vim-search-in-file.html 总有人问我 Vim 中能不能查找,当然能!而且是超级强的查找! 这篇文章来详细 ...

  9. 【转】关于在vim中的查找和替换

    1,查找 在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车. Vim会跳转到第一个匹配.按下n查找下一个,按下N查找上一个. Vim查找支持正则表达式,例如/vim$匹配行尾的 ...

随机推荐

  1. 通过代码获取res里生成R.java中的值

    引用:http://my.eoe.cn/blue_rain/archive/552.html 有的时候我们生成库文件,需要在里面加入一些UI,并提供出一些xml的资源,那如何在其他项目中使用呢? 我们 ...

  2. eclipse 安装activity插件

    公司做流程需要用到流程插件,之前用了bpm4 activity是基于bpm4延伸的,这里先介绍下activity 插件是如何安装的 官网资料 *Name:*Activiti BPMN 2.0 desi ...

  3. linux下使用远程图形界面

    1. 用xrdp的方式(客户端就是windows下的远程桌面程序) http://jingyan.baidu.com/article/d3b74d64bdab5d1f76e60951.html 2. ...

  4. YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计

    树形结构的排序在中国特色下十分普遍也非常重要,例如常说的五大班子,党委>人大>政府>政协>纪委,每个班子下还有部门,岗位,人员,最终排列的顺序通常需要按权力大小.重要性等进行排 ...

  5. 剖析javascript全局变量和局部变量

    首先要记住: javascript是弱类型语言,它只有一种变量类型(var),为变量赋值时会自动判断类型并进行转换. 全局变量和局部变量如何声明? 全局变量声明: 第一种方式(函数外) var a; ...

  6. Centos搭建Python+Nginx+Tornado+Mysql环境[转载]

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入 ...

  7. IOS 7 风格Checkbox

    Switchery Switchery is a simple component that helps you turn your default HTML checkbox inputs into ...

  8. centos 7 系统服务auditd kdump tuned irqbalance

    tuned是红帽推出的一个动态调优方案,用户可以在不同的时间段内采用不同的调优方案.由于以服务进程形式存在,就可以很方便的和crontab结合!Tuned 是监控并收集各个系统组件用量数据的守护进程, ...

  9. Java8-Function使用及Groovy闭包的代码示例

    导航 定位 概述 代码示例 Java-Function Groovy闭包 定位 本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场 ...

  10. Linux_用户级_常用命令(1):ls

    开篇语:懒是人类进步的源动力 本文原创,专为光荣之路公众号所有,欢迎转发,但转发请务必写出处! Linux常用命令第1集包含命令:ls 一.何为常用命令 人和系统交互的指令集合,构成了shell.Sh ...