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 很多哲学都是一脉相承的,只要融会贯通即可。