小甲鱼 发表于 2015-10-30 03:36:16

第六节:搜索命令和替换命令

第六节:搜索命令和替换命令

搜索命令

你知道文件中必定有你想要的东西,你也知道它的名字,但你却不知道它在哪里?在茫茫字符的海洋中,怎么办?



查找呗,VIM 的查找是从按下斜杠(/)那一刻开始的……

在普通模式下按下斜杠(/)也是进入命令行模式,此时该字符和光标均出现在屏幕的底部,这跟冒号(:)一样。

紧挨着斜杠(/)的是搜索目标,比如 /love,说明你找的是 love 这个字符串在光标后边第一次出现的位置,当然你也可以输入中文,比如 /你瞅啥



那如果要找下一个目标怎么办?这时你只需按 n 键即可定位到下一个符合的目标(向下查找),而按 N 键则返回上一个(向上查找)。

注意:第一个搜索到的目标不是文件中的第一个目标,而是从你的光标所在处开始找到的那个目标。所以你如果想要搜索文件中第一个匹配的目标,你应该先 gg 将光标移动到文件头,然后再使用搜索命令。

在普通模式下按下问号(?)也是进入命令行模式,实现的也是搜索功能。不过这回它是反过来的,你可以认为它是斜杠(/)功能的“反面派”。

前边我们说过 /FishC 是从光标位置向后开始搜索 FishC 这个字符串,而 ?FishC 则相反,是从光标位置向前开始搜索。

怕你头晕,给你列个表:




/目标?目标
搜索方向 从光标位置向后 从光标位置向前
n 向后搜索下一个 向前搜索下一个
N 向前搜索下一个 向后搜索下一个

当搜索到了文件的末尾(/目标)或开头(?目标),页面下方面会显示“Search hit BOTTOM, continuing at TOP”或“Search hit TOP, continuing at BOTTOM”的字样。表示一轮搜索到文件尾/头了,搜索下一个就是从文件头/尾开始咯。



我发现你发现了,VIM 会自动高亮所有匹配的目标,即使在你找到目标之后,它们仍然高傲的亮着!



很烦人对吧?告诉你怎么取消,输入冒号(:)进入命令行模式,然后输入 nohl 即可。

最后提个醒:在搜索命令中,.、*、[、]、^、%、/、?、~ 和 $ 这 10 个字符有着特殊意义,所以在使用这些字符的时候要在前面加上一个反斜杠(\),比如你要搜索问号,则输入 /\?


替换命令

搜索在很多情况下都是为了替换,这句话小甲鱼没说错吧?

通过搜索功能,我们将光标定位到目标位置,如果你确定这个目标是可恶的,需要被替换的,你可以输入 :s/old/new,这样即可将光标所在行的第一个 old 替换为 new;你如果输入的是 :s/old/new/g,则表示将光标所在行的所有 old 替换为 new。

但如果要替换整个文件的所有匹配字符串怎么办?总不能每一行来一下吧?
只要你能想到的,VIM 就有办法!输入 :%s/old/new/g表示替换整个文件中每个匹配的字符串。

噢,你没有太大的把握,希望 VIM 在每次替换前都咨询一下你:“亲,我准备替换 XX 了,你确定要将 XX 替换成 OO 吗?”
可以,输入 :%s/old/new/gc



看到页面下方的 (y/n/a/q/l/^E/^Y) 了吗?这是 VIM 在咨询您的意见呢!


[*]y 表示替换
[*]n 表示不替换
[*]a 表示替换所有
[*]q 表示放弃替换
[*]l 表示替换第一个并进入插入模式
[*]^E 表示用 Ctrl+e 来滚动屏幕
[*]^Y 表示用 Ctrl+y 来滚动屏幕

好吧,你可能会问“如果我只想替换第 5 行到第 13 行之间的所有 XX,可以吗?”

当然可以啦,使用 :5,13s/old/new/g 即可胜任你的要求:



我想你已经猜到了:5 表示开始替换的行号,13 表示结束替换的行号。

注释:VIM 的搜素和操作远没有这么简单,还有很多秘籍没有放出来,不过今天说的内容,已经足够你用了吧……更多秘籍将在进阶技巧中仔细讨论!



关于魔鬼训练小程序的众多问题,请移步:VIM魔鬼训练须知


tigermali 发表于 2015-11-29 20:54:09

next

屁哥 发表于 2016-6-7 13:38:21

text学到这了 自己报道下{:10_256:}

屁哥 发表于 2016-6-10 21:04:45

之前是看到这里了 没实际操作 我打算实际操作两天 再进行下一步实际操作 每次都出错我也是无语了那位师兄师姐能看到 这个帮忙看看什么情况 我的 虚拟机Teminal也步高亮了不显示颜色区别了 我之前确实是按照*文章操作的而且也成功了 这几天变这样了纠结了

caiyang 发表于 2016-11-8 12:20:41

屁哥 发表于 2016-6-10 21:04
之前是看到这里了 没实际操作 我打算实际操作两天 再进行下一步实际操作 每次都出错我也是无语了那 ...

厉害了,这条鱼不会是你手打的吧

屁哥 发表于 2016-11-8 18:32:22

caiyang 发表于 2016-11-8 12:20
厉害了,这条鱼不会是你手打的吧

哈哈

屁哥 发表于 2016-11-8 18:34:40

caiyang 发表于 2016-11-8 12:20
厉害了,这条鱼不会是你手打的吧

是手打的

摇钱妹ldd 发表于 2016-11-9 09:57:50

@小甲鱼,如何替换特殊字符

摇钱妹ldd 发表于 2016-11-9 10:03:05

摇钱妹ldd 发表于 2016-11-9 09:57
@小甲鱼,如何替换特殊字符

我明白了,原来不再同一行{:5_92:}

最终BOSS 发表于 2017-3-13 12:45:54

屁哥 发表于 2016-6-7 13:38
text学到这了 自己报道下

求解,这个程序你们是在哪里下载的呀

屁哥 发表于 2017-3-13 14:06:32

最终BOSS 发表于 2017-3-13 12:45
求解,这个程序你们是在哪里下载的呀

C语言——番外篇

lizhiyong_11 发表于 2017-4-30 12:56:23

小程序到底在哪里呀???????????????谁能告诉我一下啊

20400992 发表于 2018-5-17 14:56:17

替换还是有点麻烦。没IDE方便。

lsheihei 发表于 2019-7-23 17:23:57

鱼哥,“?”和“%”的查找不需要加“\”,不仅不需要,而且加上“\”会查不到。

我的电脑直接输入“/?”和“/%”就可以查找,是因为系统版本不同的原因吗?

Za哥 发表于 2020-5-9 15:48:45

{:10_279:}倒数第二个了   记忆好要多打

1315038808 发表于 2020-9-8 15:54:30

屁哥 发表于 2017-3-13 14:06
C语言——番外篇

这是17年的,现在vim快速入门中没有找到这个小程序诶

我很cai的 发表于 2020-10-1 20:42:00

1

lsheihei 发表于 2021-3-22 16:16:45

VIM能满足我所有的要求{:10_301:},我的最爱!!!

ochenxingo 发表于 2021-9-30 15:10:22

努力中,加油!加油!

Mocca 发表于 2021-11-12 02:02:24

谢谢小甲鱼{:5_92:}
页: [1] 2
查看完整版本: 第六节:搜索命令和替换命令