Vim入门指南

初衷

俗话说工欲善其事,必先利其器,对于程序员来说,如果要高效的编码,那么掌握某类文本编辑器的快捷键是非常有必要的(当然手速快打字快也算 )。
在文本编辑器领域内,vimemacs是绕不过的两座高山,业内有一个说法是vim是编辑器之神,emacs是神的编辑器,这句话大体是说 vim 在编辑器的操控基本是无敌的存在,而能够操控 emacs 的都是大神般的存在,网上面关于 emacs 有很多段子,比如使用 emacs 煮咖啡等,实际上 emacs 是可以外接 lisp 语言来开发,所以相对 vim 来说可以做更多非文本编辑器的事情。

心理准备

学习任何一门技能都会存在学习曲线,不同的技能学习曲线不尽相同,不过学习 vim 的朋友,看着下面这个 90° 的学习曲线,可能需要喝杯 82 年的咖啡压压惊 。
vim学习曲线
不过,毛主席都说过,任何敌人都是纸老虎,所以我们对于学习 vim 在做好充分心理准备的情况下,也没必要太打消自己的信心,小时候我们学卖油翁时也学过最朴素的道理:无他,但手熟尔,只要训练充分得当,我们也可以像卖油翁将油轻松倒过铜钱般掌握好 vim,所以,我们做好了玩 hard 模式的心理准备就可以上路啦。

小试牛刀

磨刀霍霍

要把玩 vim 首先要进入到 vim 的normal模式,才能拿到它那把锋利的道具,进入normal模式的方式有两个,一个是按住esc键,一个是按住ctrl+[键。

normal模式示例

手柄移动

玩过电脑游戏的朋友们应该都有这样的经历,需要控制游戏人物上下左右移动,一般是 wasd,vim 也一样,假设我们使用 vim 来阅读源码,这种场景一般会使用normal模式,在normal模式下对应上下左右的快捷键分别是kjhl,这是使用 vim 时最基本的快捷键,是不是特别容易?另外我们在浏览代码时,下移一行的需求基本是最频繁的,所以这里猜测 vim 把j键用作下移,另外j键上有一个小突起特别适合快速起步,从这里看出 vim 的键设置其实是非常人性化的。
小试牛刀

砍瓜切菜

很多时候我们在写完初版程序,做自我代码 review 时,经常会有删除一行或者多行的需求,如果我们使用notepad或者sublime类似的文本编辑器,需要先选中多行然后按退格键做删除,在使用 vim 时,我们只要保证我们在normal模式下,连续敲击dd键,即可删除当前光标所处的行,d2d即可删除当前行和其下一行,这样简单推理dnd就可以删除从当前行往下的n-1行啦,是不是很方便很简单?

落地为安

在我们阅读完代码,做了相应删除和编辑之后,最不能忘记的事情就是实时保存了,不然遇到断电或者系统崩溃就白瞎了,和其他编辑器使用meta+s键保存不一样,vim 需要进入命令行模式,进入命令模式的前提是处在normal模式,在normal模式下敲击:,然后编辑器下方就会出现一个类似终端的小窗口,输入w即可保存,如果想要保存后立马关闭当前文档,输入x或者wq即可。

这样我们就完成了 vim 三步走,浏览-->编辑--->保存,怎么样,是不是就和玩了一个小游戏一局一般,看起来难度也没 90° 那么大嘛。

高级特性

上面一节我们讲了我们平时使用文本编辑器的基本三步,现在我们来看看 vim 为什么被称为编辑器之神,它到底有哪些奇淫技巧,操作如此之强。

移动

在一般文本编辑器中移动是一件非常痛苦的事情,比如上下左右这种最基本的移动,我们要离开我们的打字区域,手指跑到键盘的右下角按上下左右键来移动,这无疑会让我们离开我们我们的舒适区。
但是,在 vim 的normal模式下移动是一个非常有趣的事情,通过 vim 提供的预设快捷键,我们可以在舒适区快速方便的移动,完全停不下来。
在列出 vim 的移动快捷键之前,我们先来普及一下几个基本的概念:

  • 层次:字母-->单词-->句子-->段落-->函数-->文档;
  • 首尾:单词首部-->单词尾部-->行首-->行尾-->段落首部-->段落尾部-->文档首部-->文档尾部;

与这些概念对应的在 vim 中移动的快捷键分别是:

  • 字母级别移动:参阅小试牛刀中 vim 手柄的快捷键上(k)下(j)左(h)右(l)
  • 单词级别移动:下一个单词首部(w),下一个单词尾部(e),上一个单词头部(b),上一个单词尾部(ge);
  • 行级别移动:行首(0或者^)、行尾($);
  • 段落级别移动:段落首部({),段落尾部(});
  • 文档级别移动:文档头部(gg),文档尾部(G);

编辑

删除

删除单词以及以上层次一般是一个组合键:d+级别键

  • 删除字符:删除光标前字符(X),删除光标后字符(x);
  • 删除单词:删除下一个单词(dw),删除前一个单词(db);
  • 删除行:删除当前行dd,删除当前行和下一行(dj),删除当前行和上一行(dk);
  • 删除段落:删除光标后段落(d}),删除光标前段落(d{);
  • 删除文档:删除光标前文档(dgg),删除光标后文档(dG);

其他

  • 撤销:u(undo);
  • 重做:ctrl+r(redo);
  • 复制:复制也类似删除,是组合键,格式为:y+级别键(yank);
  • 粘贴:pP(paste);

快速重复

动作+次数+方向

在熟悉了以上浏览和编辑的大部分快捷键后,使用 vim 的快速重复模式可以加速你的操作。
比如浏览代码时你想快速向下移动 4 行,删除时想快速向右删除 3 个单词,如果你只会上面的基础快捷键,那么你还是得重复多次,对于追求高效编码的你来说,是不能接受的。
vim 提供了一套模式:动作+次数+方向,其中动作可选,对于刚刚的需求来说,只需要使用4jd3w即可完成需求,是不是非常快捷,快来试试吧!

搜索/替换

一般我们在定位问题时会使用搜索,在重构时会使用到替换。
vim 也提供了强大的搜索/替换功能,并且支持正则搜索和正则替换,灰常强大。
使用 vim 的搜索和替换,我们需要从 vim 的normal模式进入到命令模式,在normal模式下按:即可进入命令行模式。

  • 搜索:/key(向下搜索关键词 key)或者?key(向上搜索关键词 key);
  • 替换:%s/source/dest/g或者1,10s/source/dest,其中%s表示全文替换,1,10s表示只对 1-10 行做替换,source表示被替换的单词,dest表示要被替换的单词,g表示该行若命中多个关键词则会都替换;
  • 正则替换:这算是 vim 替换里面比较高级的功能,下面我们来演示一个例子,把文中的morningking hello都替换成hello morningking,我们需要敲入:%s/\(hello\) \(morningking\)/\2 \1/g,这里使用到了正则里面的捕获分组,是不是很强大?

文件操作

vim 也提供了文件操作,如保存,退出,放弃,前提也是需要进入命令行模式。

  • 保存:w
  • 退出:q
  • 放弃:q!
其中保存退出可以结合使用,如 wq,当然也可以使用快捷键 x一键保存退出

其他

限于篇幅,以上列出了 vim 常用的高级特性,当然,vim 的高级特性远不止如此,比如还可以使用宏、折叠、选择模式、分屏、书签、缓冲区等,不过由于不太常用,这里暂时先不一一列举,有兴趣大家可以浏览参阅里面包含的链接继续遨游;

Live In Vim

相信大家若熟悉和高效的使用了 vim,一定会喜欢在自己习惯的软件里去寻找是否有 vim 插件,毕竟 vim 插件可以让你的手指在舒适区快速切换,逼格闪闪。
下面给大家分享一下我平时使用的软件里面的 vim 插件:

参阅

  1. Vim 导图
  2. Oh my vim
  3. Vim Tutorial
  4. Vim 手册

你可能感兴趣的:(vim,入门)