本文主要描述键盘快捷键、Emacs keybindings和Vim mode等带来的效率提升,以及这些提升的意义。
友情声明:我不直接使用Emacs或Vim,我只是使用它们当中我知道和喜欢的部分。
零、前言
每次当你将手从键盘的主区域(广义的Home row keys)移动到方向键,或者改为使用鼠标来点击软件界面时,效率都有所下降。因为:
- 移动你的手需要时间;
- 移动你的手消耗了你大脑的注意力(判断手到了方向键、鼠标没有);
- 移动鼠标、判断鼠标光标是否到达需要的位置同样消耗你大脑的注意力;
- 用鼠标点击菜单,需要时间寻找菜单项,消耗了时间。
看到这,相信你也猜到了,本文正是要强调应该节约时间,减少注意力的消耗。
一、键盘快捷键
最常见的键盘快捷键是(以Windows系统为例):
Ctrl + C : 复制
Ctrl + V : 粘贴
在复制一个文件时,使用Ctrl + C
这比起“将手移动到鼠标,然后再去点击菜单”要快了至少6倍(假设按Ctrl + C
需要0.3秒,而后者需要2秒)。
对于程序员来说,除了复制粘贴,还有如下常用的操作:
- 将光标移动到行尾
- 复制、删除光标所在的那一行代码
- 跳到指定行号的那行
- 切换窗口到上一个或者旁边的Tab
- 切换到上一个app、指定的app
- 将选定的一行或者多行代码注释掉
- 启动构件(Build)
- ...
时间消耗估算
按粗略估计,假设上述操作平均每次多消耗1秒,每分钟出现2次,一天实质工作6小时,那么一天就多消耗:
1秒 * 2 * 60 * 6 = 720 秒 = 12 分钟
那么一年下来就多消耗:
12分钟 * 22 * 12 = 3168 分钟 = 52.8 小时 ≈ 6.6 工作日
当然,相信大多数程序员或多或少也会记住和使用常见的快捷键,所以真实数据未必有上述估算那么触目惊心。
关于快捷键的建议
关于快捷键,我建议程序员们找到所使用的Editor、IDE或其他软件的快捷键表,逐个试一下,并且复习、练习那些常用但又一下子记不住的快捷键。
如:
- IntelliJ IDEA Reference Card (注:当年我在Android Studio上花了2个小时试验这些快捷键)
- Xcode Keyboard Shortcuts
- Sublime Text Keyboard Shortcuts: Windows/Linux and OSX
- Atom Keyboard Shortcuts
- Mac keyboard shortcuts (注:强烈建议macOS用户看看)
- ...
二、Emacs Keybindings
简单来说,就是使用Ctrl + P / N / B / F
分别代替了方向键的上下左右——一下子为右手减少了至少12厘米的行程。
这在macOS中是默认开启的,即意味着所有Editor、IDE中甚至输入框控件中都可以使用。而Ubuntu Linux上则需要手工操作一下(详见:Emacs-like keybindings system-wide?)。至于Windows,我就没有研究过了。
当然,这当中还有其他一些有用的组合键:
按键 | 效果 |
---|---|
Ctrl + A | 移到行首(段首) |
Ctrl + B | 左移 |
Ctrl + D | 向右删除 |
Ctrl + E | 移到行尾(段尾) |
Ctrl + F | 右移 |
Ctrl + H | 向左删除 |
Ctrl + K | 向右删除至行尾(段尾) |
Ctrl + N | 下移 |
Ctrl + O | 光标后插入新行(注:有别于回车) |
Ctrl + P | 上移 |
Ctrl + T | 交换光标旁边的两个字符 |
Ctrl + V | 类似Page Down |
Ctrl + Y | 粘贴先前由 Ctrl + K 删除的文本 |
(注:我没有学习过Emacs,只是知道上述组合键)
三、Vim Mode
小测试
请先自我测试一下,以下场景你是不是通过Home、End或者方向键等方式来实现的呢:
- 光标在行首,需要将其移动到第4个单词尾部
- 光标在行首,需要将其移动到第一个左小括号的位置之后,以便输入新文本
- 将光标移动到所在单词的下一次出现的位置(例如,在switch单词上,移动到下一个switch中)
- 想将当前行代码重复4次,以便作微小修改 (field1, field2, field3之类)
- 想删除3行代码
如果用Vim mode的话,很容易就达到了。按键分别如下:
- 3w e (3次按键)
- f ( a (3次按键)
- * (1次按键,无论两个单词间相隔多少行)
- yy 3p (4次按键,仅包含复制粘贴,未包含修改动作)
- 3dd (3次按键)
Vim mode的优点
它真正的优点,在你没有亲身体验之前,是很难向你言传的。只能概括如下:
对于同样的操作,它减少按键的次数、操作的时间,减少了大脑用于判断光标移动位置等的分神、消耗,最终大大地提高了效率。
如果你等不急的话,先看看这个教程中的动画演示吧:
- 世界上最牛的编辑器: Vim 1 (原创动图演示所有例子!)
我的Vim mode之路
对于Vim mode,我颇有相见恨晚的感触。曲折经历如下:
- 2001年学习Linux时学过Vim(或称Vi),当时只是记住了有Normal mode、Insert mode之类的区别、HJKL是使用光标的、退出时颇为麻烦;(听说有人为了退出Vim,不惜使用Ctrl+Z,然后kill掉Vim)
- 2006年有同事给我演示GVim(Vim的Windows版本),当时也没觉得它有什么威力;
- 直至2015年,有位老同事(真的“老”,他生于五十年代)在吃饭之余给我演示Chrome浏览器中如何使用Vimium这个插件做到看网页不用鼠标——正是这实实在在的演示打动了我,令我痛下决心去学习Vim mode——学习了之后才发现,不少Editor、IDE支持Vim mode。
Vim教程
鉴于我的经历,这里我也就给你搬运一下带有演示的Vim教程,希望它们能给你带来足够的震撼和学习动力:
- 世界上最牛的编辑器: Vim 1 (原创动图演示所有例子!)
- 世界上最牛的编辑器: Vim 2 (原创动图演示所有例子!)
- 世界上最牛的编辑器: Vim 3 (原创动图演示所有例子!)
另外也推荐看看“酷壳 CoolShell”上的Vim系列文章。
支持Vim Mode的软件
很多软件都有支持Vim mode的插件,甚至原生支持,这也足见其实用程度:
- Android Studio (基于IntelliJ IDEA)
- Atom
- IntelliJ IDEA系列 (PHPStorm, PyCharm, WebStorm等)
- Sublime Text
- Chrome插件: Vimium
- Firefox 插件: Vimium-FF
- ...
四、上述三者于复利的关系
复利是什么?简单来说,就是1.01的100次方
就约等于37.78,即是:微小的增长随着时间的推移而累计,越到后面收益的增长越大,且呈指数式增长。
上文中仅仅是快捷键一项中的估算(强调:是估算),一年就可以节省6.6个工作日了,还没有算上Emacs Keybindings和Vim Mode呢。
如果这势头累计20年……不算下去了,不少人在讨论35岁的程序员何去何从呢。
参考(注,本文目的不是讨论投资、理财):
复利是什么,为什么爱因斯坦说它是宇宙最厉害的东西之一(复利应该属于投资理财)?
五、结语
工欲善其事,必先利其器——鉴于复利的效应,建议立志当个好程序员的朋友尽早实践本文的3点建议。