Vim基础使用技巧

前提

在Linux系统上操作文件,避免不了要使用vim编辑器,传说中的编辑器之神。

我感到非常的惭愧,很长一段时间,我总是觉得使用vim的时候是那么的力不从心,甚至觉得哪有传说中的那么神奇?那是因为我从来没有完整学习过vim,甚至是没有完整看过一遍:help,总觉得一个编辑器有这个必要吗?

平常只是使用vim修改个配置文件什么的,知道h|j|k|l还有io等插入不就行了嘛,直到最近,编写了一些代码才发现,vim不应该这么难用,怎么可能想修改一个字符,要先x删掉,然后i插入,最后esc退出,我觉得肯定有更快捷的方法,不然怎么配上叫“编辑器之神”的称号。

在这里没有高端的使用方法,没有各种牛X插件的介绍,这是非常基础的常用使用技巧,我只是将这些常用的使用技巧做了一个简单地总结,如果其中有一条技巧帮助到了你,那么我就会觉得非常欣慰了。

1、移动

知道h|j|k|l是”左下上右”是远远不够的,还要知道下面这些字符,熟练使用他们会大大提升编辑效率。

  • w 当前光标位置直到下一个单词起始处,不包括第一字符
  • e 当前光标位置直到单词末尾,包括最后一个字符
  • $ 前光标位置直到行尾,包括当前光标位置
  • 0 当前光标位置直到行首,不包括当前光标位置。注:这是数字0
  • G 直接跳到文件最后一行
  • gg 直接跳到文件第一行
  • #G 跳到指定的行号数,#代表行号,比如12G直接跳到12行处

    显示行号请使用设置命令:set nu

一定要注意上面解释的用语

  • 直到:它是一个范围,从光标处到下一个光标处的一个范围
  • 包括不包括:可以这么说,移动的路径中是否包括某个位置,为什么这么咬文嚼字,不就是移到下一个单词处或是哪一行嘛,接着往下看,你就会知道原因。

2、删除

可能被了解最多的就是dd命令了吧,它是指删除一行,要删除多行的话,就要加上数字number dd,比如2dd删除两行(包括当前行),如果你想删除一段程序中的一个函数,不知道你会不会先去数一数或是计算一下这个函数有多少行?我就这样干过好长时间。其实它的本质就是d删除指令,下面看一下删除指令d的基本格式。

d number motion
  • number 代表数字
  • motion 代表移动

多说也解释不清楚,下面看实例,当然最好是准备一个文档跟着我一块练习。

  • d2w number为2,motionw,代表删除两个单词,这里自己练习一下,就会体会到上面说的移动范围以及包括不包括的意思。
  • d$ 没有numbermotion$,代表直接删到行尾,包括当前光标位置。
  • d5G 没有numbermotion5G,删除当前行到第5行之间的内容,包括第5行。
  • dG 没有numbermotionGG代表什么?代表跳到最后一行对不对,那么dG呢?对了,删掉当前行到最后一行内容,包括最后一行。
  • dgg 这个不用解释了吧,呵呵

上面只是举了几个特殊的例子,现在你可以大胆的去拿d命令和移动命令组合了,当你明白了其中的道理,你会发现,何必要用2dd去删除两行呢,使用dj不是更快嘛。你甚至可以通过ggdG来删除全文,所以千万不要去尝试去记住所有的命令,你要记住的只是几个字母而已,哈

3、更改

更改的命令是c,道理完全同删除命令d一样,格式用法都是一样的,不一样的是,c命令会从正常模块直接进入编辑模式。

  • cw 修改一个单词,这里同ce效果一样,结合上面的内容,自己体会一下为什么。
  • c$ 更改从当前光标到行末,还有c0c2w等等命令就不再介绍了,到这里相信你也理解了,而无需我再重复介绍了。

在这里你就会发现,xi命令貌似和cl命令一个意思,都是删掉一个字符,然后进入编辑模式进行替换。我觉得还是挺麻烦的,仅仅为了修改一个字符,就要进入编辑模式,改完了还得esc退出编辑模式,这么做vim都觉得委屈。

还是接着学习吧……

4、字符替换

替换命令,也许你都想到了是什么,删除是d,更改是c,替换当然是r啦,哈哈,对了,就是r,看到没有,大神们就是怕你记不住,根本不用你去记。

好了,穿越到上面的问题去,我现在就想修改一个字符,有没有更快的方法,别让我来回esc了,比如就想将vaid中的a改成o,那么你可以将光标停在字母a上,然后按下替换命令r,接着输入字母o就行了,整个过程完全不用切到编辑模式,而直接替换了字符。

r只是替换一个字符,如果你输入R就可以一直在替换模式,直到按下esc退出为止。

5、复制粘贴

复制命令是y,格式同dc一样,在其后加入移动命令就可以复制指定内容了。下面也只是简单两个例子。

  • y2w 复制两个单词
  • ggyG 复制全文,先用gg命令跳到首行,然后yG,从首行复制到最后一行,就复制全文了。

    d命令类似,yy代表复制当前行,2yy代表复制两行,既然复制完了,如何粘贴呢?

    使用命令p就行了,其实p命令的本质是将vim的寄存器中的内容粘贴出来,这样一讲,你就会明白,剪切该怎么做,剪切不就是删了再粘贴出来吗,使用d命令就可以了,其实vim会把删除的内容存到寄存器中,然后你通过p命令粘贴,就达到了剪切的目的。

    大写Pp的区别只是一个是粘到前面,一个粘到后面而已。

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更为强大的命令以及插件。

vim