文本处理的过程中,经常需要进行快速查找和文本替换,在vim中通过命令可以快速的实现文本的查找及替换,对于文本处理效率非常有用。
以下文Vim中查找、替换的命令介绍,请查看。
查找
/something: 在后面的文本中查找something。?something: 在前面的文本中查找something。/pattern/+number: 将光标停在包含pattern的行后面第number行上。/pattern/-number: 将光标停在包含pattern的行前面第number行上。n: 向后查找下一个。N: 向前查找下一个。可以用grep或vimgrep查找一个模式都在哪些地方出现过,
其中:grep是调用外部的grep程序,而:vimgrep是vim自己的查找算法。
用法为: :vim[grep]/pattern/[g] [j] files
g的含义是如果一个模式在一行中多次出现,则这一行也在结果中多次出现。
j的含义是grep结束后,结果停在第j项,默认是停在第一项。
vimgrep前面可以加数字限定搜索结果的上限,如
:1vim/pattern/ % 只查找那个模式在本文件中的第一个出现。
其实vimgrep在读纯文本电子书时特别有用,可以生成导航的目录。
比如电子书中每一节的标题形式为:n. xxxx。你就可以这样:
:vim/^d{1,}./ %
然后用:cw或:copen查看结果,可以用C-w H把quickfix窗口移到左侧,
就更像个目录了。
替换
:s/old/new– 用new替换当前行第一个old。:s/old/new/g– 用new替换当前行所有的old。:n1,n2s/old/new/g– 用new替换文件n1行到n2行所有的old。:%s/old/new/g– 用new替换文件中所有的old。:%s/^/xxx/g– 在每一行的行首插入xxx,^表示行首。:%s//xxx/g−在每一行的行尾插入xxx,/xxx/g−在每一行的行尾插入xxx,表示行尾。- 所有替换命令末尾加上c,每个替换都将需要用户确认。 如:
%s/old/new/gc,加上i则忽略大小写(ignore)。
还有一种比替换更灵活的方式,它是匹配到某个模式后执行某种命令,
语法为 :[range]g/pattern/command
例如 :%g/^ xyz/normal dd。
表示对于以一个空格和xyz开头的行执行normal模式下的dd命令。
关于range的规定为:
- 如果不指定range,则表示当前行。
m,n: 从m行到n行。0: 最开始一行(可能是这样)。$: 最后一行.: 当前行%: 所有行
正则表达式
高级的查找替换就要用到正则表达式。
\d: 表示十进制数(我猜的)\s: 表示空格\S: 非空字符\a: 英文字母|: 表示 或.: 表示.{m,n}: 表示m到n个字符。{m,}: 表示m到无限多个字符。**: 当前目录下的所有子目录。
通过命令:help pattern可以得到更多帮助信息。
菜鸟笔记