文本处理的过程中,经常需要进行快速查找和文本替换,在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
可以得到更多帮助信息。