查找

快捷键 功能
/PATTERN 后面的文本中查找something
?PATTERN 前面的文本中查找something
/PATTERN/+N 将光标停在pattern匹配行的后面第N行上
/PATTERN/-N 将光标停在pattern匹配行的前面第N行上
n 查找下一个,和查找方向有关
N 查找上一个,和查找方向有关
* 搜索光标所在词
g* 搜索光标所在词,但部分符合即可
# 搜索光标所在词
g# 搜索光标所在词,但部分符合即可
q: 正常模式下,q然后按':',打开命令行历史缓冲区
q/ 正常模式下,q然后按'/',可以正向查找命令历史记录
q? 正常模式下,q然后按'?',可以反向查找命令历史记录

可以用grep或vimgrep查找一个模式都在哪些地方出现过

  • :grep是调用外部的grep程序
  • vimgrep使用vim自己的查找算法
  • % 代表正在编辑的文件

用法为:vim[grep]/pattern/[g] [j] files

  • g的含义是如果一个模式在一行中多次出现,则这一行也在结果中多次出现
  • j的含义是grep结束后,结果停在第j项,默认是停在第一项
  • vimgrep前面可以加数字限定结果的上限,如:1vim/pattern/ % 只查找第一个

vimgrep在读纯文本电子书时特别有用,可以生成导航的目录。

  • 比如电子书中每一节的标题形式为n.xxx,你就可以这样:vim/^d{1,}./ %
  • 然后用:cw 或 :copen查看结果
  • 可以用ctrl-w + H 把quickfix窗口移到左侧,就更像个目录了

替换

快捷键 功能
:s/PATTERN/STRING 替换第一个匹配为STRING
:s/PATTERN/STRING/g 替换*当前行所有的匹配为STRING
:n1,n2s/PATTERN/STRING/g 替换第n1到n2行所有的匹配为STRING
:%s/PATTERN/STRING/g 替换文件中所有的匹配为STRING
:%s/^/STRING/g 在每一行的行首插入STRING,^表示行首
:%s/$/STRING/g 在每一行的行尾插入STRING,$表示行尾

% 代表所有行

替换语法后面可跟多个标记

快捷键 功能
c 表示每个替换都将需要用户确认
i 表示匹配时忽略(ignore)大小写
g 表示替换一行上的所有匹配

还有一种比替换更灵活的方式,它是匹配到某个模式后执行某种Ex命令,语法为 :[range]g[lobal][!]/pattern/ex_command

例如 :%g/^xyz/d表示对xyz开头的行执行delete命令

下面是Ex命令表,更多内容参考这里

命令 说明
:[range]d[elete] [x] 删除指定范围内的行【到寄存器x中】
:[range]y[ank] [x] 复制指定范围的行【到寄存器x中】
:[line]put [x] 在指定行后粘贴寄存器x中的内容
:[range]copy ADDRESS 把指定范围内的行拷贝到address所指定的行下
:[range]move ADDRESS 把指定范围内的行移动到address所指定的行下
:[range]join 连接指定范围内的行
:[range]normal COMMANDS 对指定范围内的每一行执行普通模式命令commands

范围

vim的很多命令前面都可以指定范围(range),如果不指定范围则表示当前行

字符 说明
m,n 从m行到n行
0 最开始一行
$ 最后一行
. 当前行
% 所有行

正则

正则表达式能够实现更为复杂的查找

:help pattern 可以查看帮助文档

元字符

元字符是在正则中有特殊含义的字符,不当做字符本身来解释,表示为单个字符或斜杠与单个字符组成的双元字符

基本元字符

元字符 说明
. 匹配任意一个字符
. 匹配任意一个字符
[] 字符集匹配,匹配方括号中定义的字符集之一
[^] 字符集否定匹配,匹配没有在方括号中定义的字符
[0-9] 所有的数字
[a-z] 所有的小写字母
[A-Z] 所有的大写字母
[a-zA-Z] 所有的字母
[0-9a-zA-Z] 所有的数字和字母
[abc-e] 匹配方括号中的任意一个字符,-表示字符范围
[^abc] ^符号表示匹配除方括号中字符之外的任意字符
\d 匹配阿拉伯数字,等同于[0-9]
\D 匹配阿拉伯数字之外的任意字符,等同于[^0-9]
\x 匹配十六进制数字,等同于[0-9A-Fa-f]
\w 匹配单词,等同于[0-9A-Za-z_]
\W 匹配单词之外的任意字符,等同于[^0-9A-Za-z_]
\t 匹配TAB字符
\s 匹配空白字符,等同于[ \t]
\S 匹配非空白字符,等同于[^ \t]
\a 所有的字母字符. 等同于[a-zA-Z]
\l 小写字母[a-z]
\L 非小写字母[^a-z]
\u 大写字母 [A-Z]
\U 非大写字母[A-Z]
\| 表示或

量词元字符

元字符 说明
* 匹配0个或多个(匹配优先)
+ 匹配1个或多个(匹配优先)
\? 0个或1个(匹配优先),\?不能在 ? 命令(逆向查找)中使用
\= 0个或1个(匹配优先),\=不能在 ? 命令(逆向查找)中使用
{n,m} 匹配n个到m个(匹配优先)
{n,} 最少n个匹配(匹配优先)
{,m} 最多m个匹配(匹配优先)
{n} 恰好n个匹配

位置元字符

元字符 说明
$ 在行尾匹配
^ 在行首匹配
\< 匹配以某些字符开头的(\<)或结尾(>)的单词,单词是用标点符号或空格来分隔的
\> 匹配以某些字符结尾的(\<)或结尾(>)的单词,单词是用标点符号或空格来分隔的

元字符的转义

如果想要元字符表达字符本身的意思,则需要使用反斜杠转义

转义 说明
\. 匹配 . 字符
\* 匹配 * 字符
\\ 匹配 \ 字符
\/ 匹配 / 字符
\` 匹配 ` 字符
\[ 匹配 [ 字符

高级正则

更多高级内容,例如magic,正反向查找,贪婪模式和非贪婪模式等参考这里



参考

Vim使用笔记
Vim的正则表达式
VIM中使用正则匹配中文
global命令
Vim高级进阶之ex命令集
vim查找替换及正则表达式的使用

Copyright © zhujipeng 2017 all right reserved,powered by Gitbook 该文件修订时间: 2017-11-04 14:57:24

results matching ""

    No results matching ""