06 Vim 修改、查找与替换
文本编辑器最基本的功能就是对文件进行增删改查,前面的小节我们已经讲了增删等相关内容以及操作。这一节我们来看一下修改、查找和替换。
使用过 Word 的人应该很知道,在 Word 中我们使用 ctrl+f 来查找我们需要的内容。但是 Word 的查找功能比较单一,Vim 则提供了更加丰富的查找场景:
- 高亮查找
- 大小写敏感查找
- 重复查找
- 预览查找
1. 查找
使用查找功能我们需要进入普通模式,普通模式如何进入前面的小节已经讲了,这里不再过多赘述。下面我们来看下针对不同的如何执行查找操作:
Tips:通模式下按下
:
,这时你会看到窗口的左下角出现了一个:
,这时我们就可以输入我们要查找的内容了。
- 开启高亮查找:在左下角的
:
后面输入set hls
,即可高亮显示查找内容。 - 开启预览查找:在左下角的
:
后面输入set incsearch
,这时 Vim 会根据输入内容提前预览匹配内容,并且实时更新 - 正向扫描:在左下角的
:
后面输入/搜索内容
,开始从上向下搜索。 - 反向扫描:在左下角的
:
后面输入?搜索内容
,开始从下向上搜索。 - 大小写敏感查找:在左下角的
:
后面输入/搜索内容c
,查找的结果会大小写不敏感。 - 大小写不敏感查找:在左下角的
:
后面输入/搜索内容C
,查找的结果会大小写敏感。
查找小实战
随便打开一个文件查找 name/Name
:
2. 修改与替换
经常替换操作都是简单的某个字符串替换。Vim 中提供了很多便捷的小技巧来满足需求
快捷键 | 含义 | 备注 |
---|---|---|
r | 替换光标下单个字符 | |
cw | 修改单个单词 | |
c$ | 修改光标之后行内内容 | |
R | 进入替换模式 |
来看下下面这个案例:进入替换模式,替换单个字符并修改单个单词
3. substitute 替换命令
除了简单的快捷键替换之外。还有更加强大的命令式替换。这种方式为了处理更加复杂的场景,尤其是结合正则表达式。
substitute 是 Vim 中最常用的搜索和替换的命令。可以缩写为 s。
替换公式::[range]s[ubstitute]/{pattern}/{string}/[flags]
默认情况下,s 只会作用域当前行的第一个匹配项。
flag选项
选项 | 含义 | 备注 |
---|---|---|
g | 全局替换 | global(也只是针对当前行全局而非全文) |
c | 每次替换前需要确认 | confirm |
e | 没有匹配项时不显示错误 | error |
i | 表示忽略大小写 | ignore |
I | 表示区分大小写 |
range 选项
选项 | 含义 | 备注 |
---|---|---|
% | 执行范围:全局 | 这个才是真正意义上的全局 |
n,m | n到m 行替换 | :12,33s/time/ting/g |
$ | 最后一行 | :12,$s/time/ting/g |
n;/pattern/ | n行到下一个匹配patter行 | :12;/ting/time/ting/g |
实操部分
打开 main.go
文件,并将文件中的 time 全部替换为 ting:
正则表达式实战
正则表达式会在后面章节中详细讲解。这里只是针对查找场景做展示。
查找 main.go 文件中包含在小括号中的代码:
Tips: 需要注意这里查找标识符后面的v: 这个主要为了进入 very magic 模式——也就是符合正常正则表达式规则的模式。详细部分会在后面正则表达式中详细讲解。
4. 小结
本节是工作中使用比较多的。主要难点还是在于结合正则表达式,本身的规则并不复杂。上述规则基本满足很多工作要求。Vim 很多哲学都是一脉相承的,只要融会贯通即可。