VIM进阶笔记(1) —— 查找与替换
之前我在lofter上发过2篇关于vim的文章,现在我把第二篇迁移过来放在这里作为1,因为那边的第一篇是转自coolshell不是我自己写的,总觉得不太好。
文本编辑器中一个重要功能就是查找与替换了,VIM中也提供了强大的功能。之前使用的时候也用过一些,整理了一些比较使用的技术,它们有的来自Vim的用户手册,有的来自其它人的博客,都列在下面。
单文件搜索
这个还是比较简单的,按 / 键可以键入需要搜索的内容,这里输入的是一个正则表达式 ,例如查找一段文字word
1 | /word |
光标会自动(向后)定位到含有word的文本处,如果要向前查找,使用?word。
如果需要全字匹配,则使用<>匹配单词开头与结尾,例如:
1 | /\<word\> |
输入一次之后,可以按下n键寻找下一个结果,如果已经到了文档结尾,则会从头开始搜索。
另外,如果光标已经处在文件中的一个单词上,则可以使用 * 键直接向后搜索这个词,使用 # 键可以向前搜索这个词。
多文件搜索
最近才会的技术,主要用于在一个工程里搜索对应的项。其实使用ctags也可以做到但有时候ctags并不能提供我们需要找的东西譬如一段字符串之类的。
如果是在shell中,可以使用find配合grep实现,在vim中的话,可以使用vimgrep(简写为vim)
vimgrep /匹配模式/[g][j] 要搜索的文件/范围
g:表示是否把每一行的多个匹配结果都加入
j:表示是否搜索完后定位到第一个匹配位置
1 | :vim /pattern/ % 在当前打开文件中查找 |
输入上面的命令以后,可以接着使用下面的命令在结果之间切换:
1 | cn 查找下一个 |
替换
vim中替换的方法有多种,一种是结合搜索+cw命令的方式,一种是直接使用substitute命令的方式。
(1) 结合搜索功能
首先使用上面的搜索功能找到一个匹配的词,按cw(c是替换命令,w是移动一个word,这是两个vim命令的组合),此时会进入INSERT模式,且这个word已经被删除了,输入需要替换的词,按Esc返回Normal Mode。
好,完成这些动作之后下面就是重复了,按n键搜索下一个匹配项,找到以后按下 . 键(重复上一个改动),就可以直接替换了,不断按下n键和 . 键,能够人工替换文中所有匹配项。
(2) 使用substitute命令
substitute,简称s,专用于替换的命令。
格式如下:
1 | :[range]s/pattern/string/[c,e,g,i] |
例如,我需要替换当前文件里所有word为drow,输入下面的命令:
1 | :%/word/drow/g |
这样就完成了所有的替换,没有提示,全自动。
个人觉得这样还是挺危险的,万一替换的不好就把有用的地方给换错了,觉得没有把握的时候可以加上c参数。实在不行,铭记vim的撤销键——u!还有全都不管强退命令:q!
学习vim最好的方法还是多多实验多多进行实际使用,用多了以后自然能够记住这些常用命令。不实际操作的话光看一遍手册(譬如我),绝大部分的内容根本就记不住。只有想起来要用的时候才会上网搜一下,我实际用的最多的就是查找,替换基本没用过,估计再过一段时间也会再忘掉………..