Emacs

为什么学习 Emacs

Emacs 是一个与 Vim 齐名的强大编辑器,事实上 Emacs 几乎具有 Vim 的所有好处,例如:

  • 只需要键盘就可以完成所有操作,大量使用快捷键,具有极高的编辑效率。
  • 既可以在终端无图形界面的场景下使用,也可使用有图形界面的版本获得更现代、更美观的体验。

此外,Emacs 与其它大部分编辑器最大的不同就在于其强大的扩展性。Emacs 的内核没有对用户做出任何限制,使用 Emacs Lisp 编程语言可以为 Emacs 编写任意逻辑的插件来扩展 Emacs 的功能。经过几十年的积累,Emacs 的插件生态可谓编辑器中最为丰富和强大的生态之一。有一种说法是,“Emacs 表面上是个编辑器,其实是一个操作系统”。只要稍作学习,你也可以编写属于自己的 Emacs 扩展。

Emacs 对 Vim 用户也十分友好,有一个叫 evil 的插件可以让用户在 Emacs 中使用 Vim 的基本操作,只需要很低的迁移成本即可从 Vim 转到 Emacs。曾经有统计显示有相当一部分用户会从 Vim 转到 Emacs,但几乎没有用户从 Emacs 转到 Vim。事实上,Emacs 相对 Vim 最大的不足是纯文本编辑方面不如 Vim 的多模态编辑效率高,但凭借其强大的扩展性,Emacs 可以扬长避短,把 Vim 吸收进来,结合了二者的长处。

如何学习 Emacs

与 Vim 相同,Emacs 的学习曲线也比较陡峭,但一旦理解了 Emacs 的使用逻辑,就会爱不释手。然而,网上的 Emacs 资料大多不细致、不够准确,甚至有哗众取宠的嫌疑。

这里给大家推荐一个较新的中文教程《专业 Emacs 入门》,这篇教程比较系统和全面,且讲述相对比较耐心细致,在讲解 Emacs 基本逻辑的同时也给出了成套的插件推荐,读完后可以获得一个功能完善的、接近 IDE 的 Emacs,因此值得一读。学完教程只是刚刚开始,学会之后要经常使用,在使用中遇到问题勤于搜索和思考,最终才能得心应手。

关于键位映射

Emacs 的唯一缺点便是对 Ctrl 键的使用过多,对小手指不是很友好,强烈建议更改 Ctrl 键的键盘映射。更改映射的方式与 Vim 教程中的方法相同,这里不做赘述。

Vim

为什么学习 Vim

在我看来 Vim 编辑器有如下的好处:

  • 让你的整个开发过程手指不需要离开键盘,而且光标的移动不需要方向键使得你的手指一直处在打字的最佳位置。
  • 方便的文件切换以及面板控制可以让你同时开发多份文件甚至同一个文件的不同位置。
  • Vim 的宏操作可以批量化处理重复操作(例如多行 tab,批量加双引号等等)
  • Vim 是很多服务器自带的命令行编辑器,当你通过 ssh 连接远程服务器之后,由于没有图形界面,只能在命令行里进行开发(当然现在很多 IDE 如 PyCharm 提供了 ssh 插件可以解决这个问题)。
  • 异常丰富的插件生态,让你拥有世界上最花里胡哨的命令行编辑器。

如何学习 Vim

不幸的是 Vim 的学习曲线确实相当陡峭,我花了好几个星期才慢慢适应了用 Vim 进行开发的过程。最开始你会觉得非常不适应,但一旦熬过了初始阶段,相信我,你会爱上 Vim。

Vim 的学习资料浩如烟海,但掌握它最好的方式还是将它用在日常的开发过程中,而不是一上来就去学各种花里胡哨的高级 Vim 技巧。个人推荐的学习路线如下:

  • 先阅读这篇 tutorial,掌握基本的 Vim 概念和使用方式,不想看英文的可以阅读这篇教程
  • 用 Vim 自带的 vimtutor 进行练习,安装完 Vim 之后直接在命令行里输入 vimtutor 即可进入练习程序。
  • 最后就是强迫自己使用 Vim 进行开发,IDE 里可以安装 Vim 插件。
  • 等你完全适应 Vim 之后新的世界便向你敞开了大门,你可以按需配置自己的 Vim(修改 .vimrc 文件),网上有数不胜数的资源可以借鉴。
  • 如果你想对配置 Vim 有更加深入的了解,Learn Vim Script the Hard Way 是一个很好的资源。

关于键位映射

用 Vim 编辑代码的时候会频繁用到 ESC 和 CTRL 键, 但是这两个键都离 home row 很远, 可以把 CapsLock 键映射到 Esc 或者 Ctrl 键,让手更舒服一些。

Windows 系统可以使用 Powertoys 或者 AutoHotkey 重映射键位。 
MacOS 系统提供了重映射键位的设置,另外也可以使用 Karabiner-Elements 重映射。
Linux 系统可以使用 xremap 进行映射,对于 wayland 和 x.org 都可以使用,并且支持分别映射点按和按住。

但更佳的做法是同时将 CapsLock 映射为 Ctrl 和 Esc,点按为 Esc,按住为 Ctrl。这是不同系统下的实现方法:

推荐参考资料

  • Neil, Drew. Practical Vim: Edit Text at the Speed of Thought. N.p., Pragmatic Bookshelf, 2015.
  • Neil, Drew. Modern Vim: Craft Your Development Environment with Vim 8 and Neovim. United States, Pragmatic Bookshelf.