Vim入门指南

初衷

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

心理准备

学习任何一门技能都会存在学习曲线,不一样的技能学习曲线不尽相同,不过学习 vim 的朋友,看着下面这个 90° 的学习曲线,可能须要喝杯 82 年的咖啡压压惊 😂。 程序员

vim学习曲线
不过,毛主席都说过, 任何敌人都是纸老虎,因此咱们对于学习 vim 在作好充分心理准备的状况下,也不必太打消本身的信心,小时候咱们学卖油翁时也学过最朴素的道理: 无他,但手熟尔,只要训练充分得当,咱们也能够像卖油翁将油轻松倒过铜钱般掌握好 vim,因此,咱们作好了玩 hard 模式的心理准备就能够上路啦。

小试牛刀

磨刀霍霍

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

normal模式示例

手柄移动

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

小试牛刀

砍瓜切菜

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

落地为安

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

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

高级特性

上面一节咱们讲了咱们平时使用文本编辑器的基本三步,如今咱们来看看 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 手册
相关文章
相关标签/搜索