Vim基础使用技巧
前提
在Linux系统上操作文件,避免不了要使用vim编辑器,传说中的编辑器之神。
我感到非常的惭愧,很长一段时间,我总是觉得使用vim的时候是那么的力不从心,甚至觉得哪有传说中的那么神奇?那是因为我从来没有完整学习过vim,甚至是没有完整看过一遍:help
,总觉得一个编辑器有这个必要吗?
平常只是使用vim修改个配置文件什么的,知道h|j|k|l
还有i
、o
等插入不就行了嘛,直到最近,编写了一些代码才发现,vim不应该这么难用,怎么可能想修改一个字符,要先x
删掉,然后i
插入,最后esc
退出,我觉得肯定有更快捷的方法,不然怎么配上叫“编辑器之神”的称号。
在这里没有高端的使用方法,没有各种牛X插件的介绍,这是非常基础的常用使用技巧,我只是将这些常用的使用技巧做了一个简单地总结,如果其中有一条技巧帮助到了你,那么我就会觉得非常欣慰了。
1、移动
知道h|j|k|l
是”左下上右”是远远不够的,还要知道下面这些字符,熟练使用他们会大大提升编辑效率。
w
当前光标位置直到下一个单词起始处,不包括第一字符e
当前光标位置直到单词末尾,包括最后一个字符$
前光标位置直到行尾,包括当前光标位置0
当前光标位置直到行首,不包括当前光标位置。注:这是数字0G
直接跳到文件最后一行gg
直接跳到文件第一行#G
跳到指定的行号数,#
代表行号,比如12G
直接跳到12行处显示行号请使用设置命令
:set nu
一定要注意上面解释的用语
- 直到:它是一个范围,从光标处到下一个光标处的一个范围
- 包括不包括:可以这么说,移动的路径中是否包括某个位置,为什么这么咬文嚼字,不就是移到下一个单词处或是哪一行嘛,接着往下看,你就会知道原因。
2、删除
可能被了解最多的就是dd
命令了吧,它是指删除一行,要删除多行的话,就要加上数字number dd
,比如2dd
删除两行(包括当前行),如果你想删除一段程序中的一个函数,不知道你会不会先去数一数或是计算一下这个函数有多少行?我就这样干过好长时间。其实它的本质就是d
删除指令,下面看一下删除指令d
的基本格式。
d number motion
number
代表数字motion
代表移动
多说也解释不清楚,下面看实例,当然最好是准备一个文档跟着我一块练习。
d2w
number
为2,motion
为w
,代表删除两个单词,这里自己练习一下,就会体会到上面说的移动范围以及包括不包括的意思。d$
没有number
,motion
为$
,代表直接删到行尾,包括当前光标位置。d5G
没有number
,motion
为5G
,删除当前行到第5行之间的内容,包括第5行。dG
没有number
,motion
为G
,G
代表什么?代表跳到最后一行对不对,那么dG
呢?对了,删掉当前行到最后一行内容,包括最后一行。dgg
这个不用解释了吧,呵呵
上面只是举了几个特殊的例子,现在你可以大胆的去拿d
命令和移动命令组合了,当你明白了其中的道理,你会发现,何必要用2dd
去删除两行呢,使用dj
不是更快嘛。你甚至可以通过ggdG
来删除全文,所以千万不要去尝试去记住所有的命令,你要记住的只是几个字母而已,哈
3、更改
更改的命令是c
,道理完全同删除命令d
一样,格式用法都是一样的,不一样的是,c
命令会从正常模块直接进入编辑模式。
cw
修改一个单词,这里同ce
效果一样,结合上面的内容,自己体会一下为什么。c$
更改从当前光标到行末,还有c0
,c2w
等等命令就不再介绍了,到这里相信你也理解了,而无需我再重复介绍了。
在这里你就会发现,xi
命令貌似和cl
命令一个意思,都是删掉一个字符,然后进入编辑模式进行替换。我觉得还是挺麻烦的,仅仅为了修改一个字符,就要进入编辑模式,改完了还得esc
退出编辑模式,这么做vim都觉得委屈。
还是接着学习吧……
4、字符替换
替换命令,也许你都想到了是什么,删除是d
,更改是c
,替换当然是r
啦,哈哈,对了,就是r
,看到没有,大神们就是怕你记不住,根本不用你去记。
好了,穿越到上面的问题去,我现在就想修改一个字符,有没有更快的方法,别让我来回esc
了,比如就想将vaid中的a改成o,那么你可以将光标停在字母a上,然后按下替换命令r
,接着输入字母o就行了,整个过程完全不用切到编辑模式,而直接替换了字符。
r
只是替换一个字符,如果你输入R
就可以一直在替换模式,直到按下esc
退出为止。
5、复制粘贴
复制命令是y
,格式同d
、c
一样,在其后加入移动命令就可以复制指定内容了。下面也只是简单两个例子。
y2w
复制两个单词ggyG
复制全文,先用gg
命令跳到首行,然后yG
,从首行复制到最后一行,就复制全文了。和
d
命令类似,yy
代表复制当前行,2yy
代表复制两行,既然复制完了,如何粘贴呢?使用命令
p
就行了,其实p
命令的本质是将vim的寄存器中的内容粘贴出来,这样一讲,你就会明白,剪切该怎么做,剪切不就是删了再粘贴出来吗,使用d
命令就可以了,其实vim会把删除的内容存到寄存器中,然后你通过p
命令粘贴,就达到了剪切的目的。大写
P
和p
的区别只是一个是粘到前面,一个粘到后面而已。
6、搜索匹配
搜索单词hello
,在正常模式下输入:/hello
就行了,n
向下搜索,N
向前搜索。
想忽略大小写进行搜索,输入设置命令:set ic
就可以了。
7、匹配替换
匹配替换就是word里面的替换功能,如果全篇的void
都写成了vaid
,总不能一个一个修改吧,于是就有了匹配替换功能。
:s/old/new/g
将所在行的old替换成new:%s/old/new/g
整个文件范围内进行替换:%s/old/new/gc
找到每个匹配串,并对每个匹配串提示是否进行替换:#,#s/old/new/g
在若干行范围类进行替换,#
代表行号
8、撤销与重做
这里我只想提上一句,撤销命令是u
,也就是undo;重做命令为ctrl-r
,好了,知道这些够用了。
9、文件
还有一些关于文件操作的小技巧,就总结到下面了
:#,# w filename
选择性保存,如:13,14 w filename
将文件中13行,14行另存到filename文件中:r filename
插入外部文档,将filename文件内容插入到光标所在下方
10、插入命令
为什么把最基础的命令留到了最后,因为前面的内容实在太精彩了。
i
&I
光标前插入 & 光标所在行行首插入a
&A
光标后插入 & 光标所在行行尾插入o
&O
下一行插入 & 上一行插入
结束语
好了,基本上,你现在可以熟练操作vim编辑器了,你会发现肯定比普通编辑器要厉害多了,但是要想达到IDE的效果,那你还得继续努力,学习vim更为强大的命令以及插件。