Emacs: 编辑代码与工作效率

硬件

投资硬件是最简单直接的提高工作效率的方法

屏幕与键鼠是程序员与电脑之间的输出输入设置,是程序员每天工作接触时间最长的东西,硬件上的提升可以直接提高工作效率以及每天工作的心情。

键盘的选择

认识薄膜键盘,机械键盘与静电电容键盘

不差钱直接上静电电容键盘

机械键盘

先说结论:只选红轴。

键盘这东西最好一步到位一发退烧,不需要反复投入。就机械键盘说来,

  • 红轴与黑轴无冲,适合游戏玩家,不同的是按到底所需的力度红轴较小黑轴较大
  • 茶轴与青轴敲击有段落感适合程序员与打字員,青轴所需力度较小但是声音比较吵,茶轴是最多人选择的键芯。 综上选择茶轴机械键盘使用,然后可以考虑转向红轴。最重要的是实际试用自己最符合自己的手感

人体工程学键盘

人体工程学键盘的选择见仁见智

HHKB(Happy Hacking Keyboard)

HHKB吹有很多,盲目买HHKB的更多。不引战,只说个人观点:HHKB不适合重度Emacs用户

键盘布局的选择

市面上一般键盘所用的都是qwert布局的键盘,虽然有数据表示dvorak布局可以提高输入效率以及减少手指疲劳,但是较高的上手难度以及训练过渡期间几乎让你不会打字的痛苦都是使用dvorak布局的成本,而且不见得在你掌握新布局之后打字效率会有多大的提升。

作为程序员打字的速度并不是瓶颈,思考速度才是瓶颈,老老实实使用qwert布局就足够了。

多屏幕

多个显示器可以提高程序员的工作效率,减少切换屏幕带来的上下文切换。 从一家公司是否给员工配置多个显示器可以看出公司是否尊重程序员的工作。

无脑地使用两个显示器即可提高工作效率,你可能还需要屏幕支架。

使用轨迹球,避免鼠标手

Logitech M570 聊胜于无

选择正确的编程字体

windows 下自带的的 Consolas 以及 Mac 下自带的 Monaco 是不错的选择

英文的等宽字体: Iosevka, Hack, Source Code Pro

中文的等宽字体: 文泉驿等宽微米黑, 微软雅黑

好多人还在使用Windows系统默认的字体,那效果用来看代码实在是惨不忍睹。 一旦选择了任一个编程字体,只要15分钟,你几乎不可能还会用回默认的Courier New字体。

Emacs中文与英文对齐

chinese-fonts-setup 分别设置Emacs显示中英文时使用不同的字体和大小,帮助你对齐中英文,在我看来在写org文档时这是一个必备的扩展。在使用org-mode table对齐时特别有用。

编辑器: Emacs

Why it's worth to learn emacs, because the experience will not go away

Emacs的学习曲线是比较陡峭,但是长期来说投资在Emacs上的时间是值得的。逻辑非常简单:

  • 程序员的工作需要进行大量的文本编辑工作
  • Emacs是非常强大的文本编辑器
  • 所以Emacs可以提高程序员的工作效率

key binding

当你在命令行界面使用bash时,你熟悉的ctrl+a跳至行首, ctrl+e跳至行末等快捷键其实就是来源于Emacs,事实上你使用的是bash依赖的GNU readline的默认emacs mode。

Mac OS下的cocoa应用默认有emacs按键绑定,你用发现在Mac下使用emacs按键绑定是很自然的事情。

大多数流行的IDE(Eclipse/JetBrains系列/VS Code)都可以设置为 emacs 布局的按键绑定。

熟悉了 emacs 的基本操作快捷键组合后很多地方都可以用得上。

Emacs的编辑哲学

为什么学习Emacs可以带来好处,因为Emacs会让你对于编辑文本的思考方式不再是基于字符的方法,取而代之的是逻辑上的编辑动作

从最基本的两个命令(M-x调用命令,ctrl+h查找帮助)开始,你对于日常编辑文本的需求都会变成命令式的。

例子

排序,选中需要编辑的行,M-x sort-lines.

消除行末多余的空格,选中需要编辑的行,M-x whitespace-cleanup.

光标的移动,字符的删除不再是右移一个字符,删除一个字符。使用ctrl键组合进行基于字符的移动和删除,使用meta键组合进行基于词语的移动和删除。

  • ctrl-f右移一个字符 meta-f右移一个词语
  • ctrl-d删除一个字符 meta-d删除一个词语

文件内的跳转不再是基于上下左右移动光标,使用ace-jump-mode或者avy-mode你可以快速将光标定位于你想要跳转到的单词。

jumping around

showcases

想到知道 emacs 在日常的编辑文本工作中可以有多用。Emacs Rocks的一系列简短视频可以告诉你。掌握其中一些技巧可以让你在几秒钟内完成你之前也许需要用分钟来计算的任务。

秘密武器:emacs lisp

原生的emacs也许是很好,但是还不够好。Emacs的秘密在于它的扩展可以使用emacs lisp编程语言来写,Emacs 本身相当于emacs lisp的运行环境和解析器。

emacs lisp是一门完善的编程语言,所以程序员们可以方便地编写扩展来集成调用第三方的应用,也许是一个web api也许是一个命令行工具,然后提供给emacs使用。emacs用户可以方便的使用M-x进行调用,相当于将复杂的编辑需求抽象成一个编辑动作

杀手级应用

emacs的用户群体已经超出了程序员的范围,现在有许多作家以及科学写作者都开始使用emacs,这些都是emacs的 org-mode 带来。简单的说来org-mode是一个使用emacs来写笔记的扩展,使用一种类似于markdown的语法。

我自己使用org-mode来组织笔记,编写内容然后生成类似readthedocs风格的文档,编写内容然后生成用于演讲分享的slides

emacs的另一个杀手级应用我个人认为是magit,在emacs里进行 git 的管理。 magit

结语

提高工作效率,投资硬件是最简单直接生效最快的方法。程序员的日常工作需要大量的文本编辑,emacs很有用,但即使不使用emacs投资时间去掌握一个自己喜欢的编辑器/IDE也是值得的,因为每日的工作大量时间花费在编辑器/IDE里面。