Fork me on GitHub

扔掉鼠标,开始键盘流编程

之前曾和朋友讨论,为什么很多程序员舍得买千元价位的键盘,却很少愿意买个同级别的鼠标……最后一致认为原因在于代码是键盘敲出来的,不是鼠标点出来的。如果以后编程简化到拖拽下控件就搞定,那价值天平恐怕就能向鼠标倾斜了。

在开始尝试键盘流编程前,需要达成一个共识──

不依赖鼠标的编程,不仅很酷,更重要的是非常高效。

以 Java 编程来说,我使用的软硬件是 MacBook Pro、IntelliJ IDEA、Vim。脱离鼠标编程的关键在于──

  • 熟悉代码定位的快捷键,包括目标文件的打开,方法定义/实现的跳转等;
  • 熟悉文档操作的快捷键,复制粘贴是最最基础的,复杂高阶的甚至可以是宏操作;

纯熟的掌握以上两个技能,基本可以实现不依赖鼠标,双手不离开键盘地进行编程了。而 MacBook + IntelliJ IDEA + Vim 的组合工具最大化的降低了上述两点的习得门槛。为什么下这样的结论,其一,macOS 常用的组合键是 Command 键,这样就释放了大量潜在的以 Control 键为基础的快捷键,此外 macOS 支持 Emacs 的光标移动快捷键,这非常高效;其二,IntelliJ IDEA 是最棒的 Java IDE 没有之一,它的快捷键也是最出色的;其三,Vim 是久经考验的编辑器之神。

吹工具的话到此为止,下面就具体写写怎么用这些工具实现键盘流编程。

IDEA 本身并不支持 Vim 操作,需要安装一个堪称神器的插件 IdeaVim,几乎可以说是模拟 Vim 最好的一个插件了。IDEA 的完善快捷键加上 Vim 强大的文本编辑能力,多加练习就完全可以脱离对鼠标的依赖。

先来看 IDEA 自带的快捷键,哪些能带来强大的生产力。

IDEA 键盘流

快速定位文档

IDEA 通过连续点击两次 Shift 键可以打开全局文件查找和最近访问文件查找;
在文件查找框中输入 / + 文件夹名,可以定位到文件夹所在位置;
通过 Command + E 打开最近访问文件的查找框;
通过 Command + Shift + O 查找文档名,精确定位文档;
在选择文档时,你根本不需要移动鼠标去点击,扔掉鼠标,试着用 Ctrl + N (P, F, B) 来对光标进行向下、向上、向前和向后移动。

快速打开工具

IDEA 内置了很多有用的工具和优化动作,比如 Console、 Rest Client、智能优化 import 和填充 Getter Setter 等,如果用鼠标去找再去一个个点真的很费劲,可以通过 IDEA 的全局动作搜索功能进行查找,快捷键是 Command + Shift + A,在搜索框中输入工具或动作的关键字就能定位到,自己尝试下吧,非常强大!

全局查找修改

有时候需要全局的查找关键字和修改,Command + Shift + F 全文搜索,更强大的是,IDEA 支持对文件名/变量名重命名而不影响引用关系,试试 Shift + F6 吧。

IdeaVim 键盘流

对 Vim 熟悉的开发者,很多都会在其他编辑器和 IDE 中引入 Vim 的编辑模式,因为 Vim 实在是太好用了,我的理解是,Vim 其实不只是一款编辑器,它更是一种编辑的思想,及时脱离了 Vim 编辑器本身,很多 Vim 爱好者也会习惯于并认同使用 hjkl 键移动光标。

在 IntelliJ IDEA 中启用 Vim 模式后,会有一些快捷键冲突,主要是内置的几个 Ctrl 快捷键和 Vim 模式冲突,但冲突的键不多也很好解决,这个我在之前的博客中已经提供了参考方案。

Vim 的学习曲线有点陡,很多快捷键的记忆并不很直观,关于 Vim 操作的介绍可以写一本书,我掌握的水平也就是小半瓶水,但已经足够我在文本编辑时体会到快速和便利了。下面说几个操作抛砖引玉吧。

光标的快速移动

在文件中如果要快速移动光标,大多数人会觉得用鼠标肯定打打快过键盘啊,毕竟鼠标指哪打哪。但写代码和浏览网页不同的地方在于,写代码时要定位一个位置往往是有目的性的,比如我就想跳转到某一行,我就想跳转到方法的结尾,类似这样的场景,鼠标其实不太好用,因为我还得要用眼睛去找,再移动鼠标去点击到那个位置,看似快实则慢。Vim 的话就会非常方便,比如我想让光标往下移动 12 行,就是通过敲键盘数字 12 和 j 键;gg 跳转到文件首行,G 跳转到文件末行;数字 n + G 跳转到第 n 行;% 跳转到当前括号的另一半对应位置……还有很多非常使用编程常用操作,不一一举例了。

Vim 的复制/剪切/粘贴也很方便,关键在于习惯 Vim 模式,脱离使用了多年的 Ctrl + C。键盘流编程并不难,至少我在使用 IDEA + Vim 并主观的尽量不用鼠标一段时间后,能明显感到编码更顺畅了,双手不用离开键盘确实能带来非常好的 Coding 体验,值得为此努力尝试。