EMACS-DOCUMENT

=============>集思广益

一个 CEO 的 Emacs 指南

约数年前,噢,不,是数十年前了,我就生活在 Emacs 中. 编写代码和文档,管理邮件和日程, 以及使用 shell 自动化一切的操作,这些活动都是在我的编辑器(或者说是操作系统) 上完 成的; 这样的生活我过得真的很开心。然而数十春秋寒暑过去了,我也用上了其他更加新, 更加潮的玩意了。结果呢,我却已经忘记了如何在脱离鼠标的情况下高效地浏览,跳转文件 了。大概是三个月前吧,我注意到我有大量的时间是浪费在不同的应用程序和电脑之间的来 回切换,我决定再次投入 Emacs 的怀抱,这是一个非常正确的决定,为什么这么说?原因 我会在接下来的段落里面说明,此外我还会介绍我的 Emacs 配置以及 Dropbox 使用技巧, 以构建一个可迁移的环境。

对于那些未曾使用过 Emacs 的人而言,Emacs 很可能是你现在所厌恶,但最终会喜爱的东 西。乍一看,你会觉得 Emacs 是一台房子那么大的却只拥有烤面包机功能的 Rube Goldberg machine (译者注:这是卡通中的一种完成简单任务的非常复杂的机器).很难说这 样的话是对 Emacs 的一种赞美,不过请留意 乍一看 这个非常重要的词。因为当你真的 深入了解Emacs 之后,你就会发现 Emacs 即使是烤面包机,也是一台可以当引擎用的 "核 能烤面包机",可以处理任何你想处理的文本。当你意识到你有多少时间是花在处理文本上, 你就会觉得你说"Emacs 是像引擎一样强大"的言论是相当大胆激进;虽说这有点惊世骇俗, 但这就是事实

可能对于我来说,更重要的是,他让我感觉到我是它的拥有者,而不像其他软件一样, 只是个不知名的用户而已, 并且还会被它位于 Soma 或者 Redmond (译者注 :微软 公司所在地之一) 的市场营销部门窥探钱包,想方设法让我付钱。现代的生产或者创 作工具 (例如,Page 或 IDE) 都像碳纤维自行车那样; 它们可以很轻易地进行拆卸和组装。 Emacs 就好像满箱子的经典 Campagnolo (译者注:高端自行车部件)部件和非常好的钢制框 架,只是缺了一个曲柄臂和制动杠,你必须自己去网上搜寻你缺少的部件。Emacs 的第一个 特点就是快和完整,第二个特点就是会带给你的余生无尽的快乐 (或者是烦恼,就取决于你 是什么样的人了).我自己就是那种会在翻寻老古董或者折腾编辑器中得到很多乐趣的人了。 这个具体就因人而异了

bicycle.jpg

我现在仍在骑的 1933 钢制自行车。有兴趣的可以看一下不同材料的自行车车架的比较 (需 翻墙) https://www.youtube.com/watch?v=khJQgRLKMU0

可能有时 Emacs 给人的感觉是它就是个不合时宜的老古董,这种看法并不正确。Emacs 是非常强 大并且可以与时俱进的,但是 Emacs 需要你耐心地理解它的哲学。而 Emacs 的哲学又是那 样的与众不同,甚至可以说是怪异; 而了解 Emacs 以后,你又会发现 Emacs 是那般的 引人入胜。对我而言,Emacs 更像是未来的产物,而不是过时的古董; 就好像钢制车架会在未 来大行其道,而碳纤维车架最终会无人问津那样; 也正如那些最新潮的应用都会被遗忘在历 史的洪流中,而 Emacs 会恒久远,永流传。

如果你热忱于使用 Lisp 打造适合自己的并且可以移植到任何电脑的工作环境的话,你一定 会爱上 Emacs. 但是如果你喜欢那些新朝,开箱即用,无需额外投资时间精力学习的工作环 境的话,Emacs 可能就不适合你了。我已经没有编写代码了 (除了 Ludwig 和 Emacs Lisp), 但是我发现大部份在 Fugue (译者注:作者所在的公司) 的工程师都可以高效地使 用 Emacs. 在 Fugue, 大概 30% 的工程师使用 Emacs , 40% 的工程师使用 IDE, 30% 的工 程师使用 Vim. 而本文是写给 CEO 以及其他的 PHB 的(Pointy-Haired Boss 译者注:漫画 中的蠢蠢的老板, 1)(当然,也写给所有对 Emacs 感兴趣的人). 所以我接下来会解 释我为什么如此喜爱 Emacs 以及我是怎么使用 Emacs 的。我希望可以为你提供足够多的细 节, 以便你不用 google 就可以玩转 Emacs. 如果你也喜欢我的 Emacs 环境,你可以把我 的 Emacs configuration 下载下来

1 Lasting Advantages

使用 Emacs 的长期好处就是你的生活会变得更加简单,而对 Emacs 的投入产出比会让你觉 得学习 Emacs 是非常值得的。考虑一下下面这些内容:

1.1 No more Context Switching

如果你像我那样,需要经常处理大量的文档 – 从博文到需要员工 review 的会议资料, 那么你花费时间去单独学习 Org-mode 就非常有必要了。在现代的计算世界,上述的这 些文档工作意味着你需要若干不同的程序,而这些程序有各种令人分散注意力的用户接 口,并使用不同的方式来进行保存,排序,搜索。结果就是你需要在各种不同的内容 之间切换,并要记住它们之间的细节。我讨厌这样的切换,我讨厌因为这种不友好的设 计而导致的不必要的负担2,我讨厌我需要记住这些本应该由电脑记住的内容。就 提供一个单一的环境而言,Emacs 之于 PHB ,会比之于程序员而言更加有用,因为程序 员一天大部份的时间都会专注在单个的应用上,例如 IDE。此外,在不同内容见切换所花 费的代价会要比我们所想象的要高;而操作系统和那些程序会通过修饰用户接口以掩盖这 个真相。如果你是一个技术人员,使用一个单独的快捷键就可以调用一个强大的语言解 释器对你而言是非常有用的。 3

许多程序可以编辑文本的时候整天全屏。而 Emacs 是独一无二, 因为它不仅是一个文 本编辑器,还是一个 Lisp 解释器。本质上,当你在处理代码逻辑的时候,你按下一 个或两个按键之后,你有了一台图灵完备机了。不管你是否精通编程, 你都会发现到你可以在 Emacs 里面实现任何事情。只要你记住了 Emacs 的命令, 那么在你工作的时候,你几乎可以把你电脑的潜能都激发出来。你不会想在 Emacs 里 面再创建一个 Excel, 但大部份你在 Excel 里面完成的事都很小, 很容易用一两行代码就实现。 如果我需要操作数字,我更可能跳转到 scratch 缓冲区, 并且编写一些代码, 而不会打开一个电子表格。即使我要写邮件,并且邮件不止一行那 么短,我也会在 Emacs 里面编写,然后粘贴到我在邮件客户端中。当你只需使 用Emacs 来完成所需的工作流的时候为什么还需要不断地切换程序? 一开始你可能只会进行简 单的一两次计算,但是随着时间的推移,你会发现在 Emacs 里面完成任意所需计算都要相对容易。 可能对于那些可以提供丰富特性的程序而言,这是独一无二的吧。还记得 Isaac Asimov 书中提及的魔幻般的终端么? 在我接触过的众多的程序中, Emacs 是最 接近书中所描述的玩意4 。我没有再去纠结,我应该使用哪个程序做这件事,哪个程序去做那件事。 取而代之的是,我只要去做就好了。因为已经有如此强大和高效的工具了,我只需坚持使用它。

1.2 Creating Things in Peace and Quiet

拥有你所接触过的最强大的文本编辑特性是什么样的感受呢?有整个社区的成员来创造 有用的工具又是怎么样的感觉?指间能触控强大的 Lisp 的感觉呢?这些问题就是我使 用Emacs 来完成除了操作音频和图片之外的全部创造性工作的感受了

在我的桌面上,有两个屏幕;一个就是打开 Emacs 的 portrait mode 并一整天全屏, 另外一个屏幕就是打开浏览器,用来阅读和搜索;我通常也会打开一个终端。我会把我 的日历,邮件以及其他东西放到 OS X 的另外一个桌面,不过当我在 Emacs 里面的时候, 我会把它们全部隐藏,并且关闭全部的通知。这样可以让我专注于我手头的工作。我发 现使用那些拥有现代用户界面的程序时,总是会被它们各种用户提示和帮助信息分散注意力。 我不需要在我已经操作同一个程序成千上万次以后,程序还要不断提醒我如 何操作,我需要的是简洁,易用的并且尽可能周到的白纸。可能我只是随着年纪的增长 和各种糟糕的体验增多,而不能忍受这样杂乱不堪的环境吧,但是我还是建议每个人都 应该尝试一下 Emacs. 这样在你的电脑,你就拥有了一个安静舒适的环境。当然,现在 的很多的应用都可以隐藏掉它们的接口,此外,谢天谢地,微软和苹果都有了完全意义 下的全屏模式。但是,其他的应用并没有可以强大到让你能 "活在" 这应用里面并完成 大部分的工作。除非你是一整天都在编写代码或者是在编写长篇的文献,例如书本,不 然你还是要面对很多乱七八遭的应用。此外,大部分现代的程序似乎都不能兼顾易用性 和功能。5 比 office 的程序更让我厌恶的就是 office 程序的在线版本

desktop.jpg

我的桌面布局,Emacs 在左边。

那么交流方面又如何呢?创造和交流之间是有者本质差异的。在为这两中活动安排了独立时间后, 我变得非常有效率。我们在 Fugue 使用 Slack, 而 Slack 真的是让我又爱又恨。 我把 Slack 和我的日历,邮件放到同一个消息桌面,这样,在我工作的时候, 我就可以幸福地把整个喧嚣的世界排除在外了。只有当有 Slackstorm 或者是 来自 VC 或者Board Director 的邮件才可以把沉醉于工作的我唤醒,不然的话,大部份其 他的事我都是会过了一两个小时才会去处理的

1.3 Taking Everything with You and Keeping It Forever

第三个我觉得 Emacs 比其他的环境先进得多的原因就是 Emacs 很容易为你提供你 所需要的所有的东西。我的意思是指,你不需要拥有过多的程序,并以它们要求的方式 进行交互或者同步,你只需使用 Dropbox 或者类似的同步程序来同步你的一两个文件夹。 这样,你就可以在任何地方使用你经过你精心打磨的环境来完成你的工作。我就是这样 在 OS X, Windows, 和 Linux 上跨平台工作的。我真的觉得这样的工作方式非常有 用,我已经厌烦了跟 Pages, GDocs, Office 或者其他类型的文件和需要我在文件系统 或者云上查找东西的程序作斗争了。

我觉得,制约能否在电脑上永久保存东西的其中一个因素是文件格式。假设人类已经解决了 如何有效保存的问题 6,那么我们一直面临的问题就会是我们是否始终可以获取我 们创建的文件的信息呢?对于计算机而言,文本文件是生命力最长的文件格式了。例如, 在1970年,你可以很容易地使用 Emacs 打开一个文本文件。对于 Office 的程序而言, 这就是不可能的事情了。文本文件也是友好并且是很小的--比 Office 程序的文件小 得多了。对于有磁盘空间强迫症 (digital packrat) 并且经常要标注脑海中涌现出来的 想法的我而言,拥有简单,轻量,持久的数据集是非常重要的。

如果你已经对尝试 Emacs 做好准备了,那就继续看下去。下面小节的内容不是用来代替 Emacs 的完整教程的,但是在你读完下面的内容之后,你自己已经能够动手操作。

2 Learning To Ride Emacs - A Technical Setup

Emacs 有非常陡峭的学习曲线,需要你耗费许多精力和时间,但是这些就是你想要得到 Emacs 强大威力需要付出的代价,此外 Emacs 完成每一件事都与你之前使用过的程序不 一样。一开始的时候,你可能感觉你浪费时间在一个古老又奇怪并且已经过时的程序上面。 这种感觉就像你已经驾驶汽车了,却在学习骑自行车一样。 7

2.1 Which Emacs?

我在 OS X 和 Windows 上使用来自 GNU 的原生的 Emacs. 你可以获取 OS X 定制版本 的 Emacs 和 Windows 版本的 Emacs. 也存在其他版本的 Emacs, 特别是 OS X 上的版 本。不过我发现事实上 Emacs 强大功能(调用 Lisp 和其他 modes) 的学习曲线要比 想象中低很多的。所以你只要下载 Emacs, 然后就可以开始我们的 Emacs 之旅了8。 你可以通过下载这个 tar 文件获取我的 Emacs 环境。当你解压缩这个 tar 文件的时候, 你就会得到一个 .emacs.d 文件夹和一个 .emacs 文件。因为它们的文件名都是以 点号 . 开始的,所以在 *nix 系统下会被隐藏掉。你需要在 *nix 系统下使用一个终 端来查看这些文件。或者设置你的 Finder 文件管理器或者其他图形化程序显示隐藏文 件。(来不及了,快点上车)

2.2 First, You'll Need To Learn How To Navigate

在这篇文章里面,我使用 Emacs 默认的按键绑定。 'C' 代表 control 键, 'M' 代表 meta 键(通常是指 Alt 或者 Option 键). '-' 连字符代表同时按下相应的组合键,所 以 C-h t 就意味着同时按下 control 和 h, 然后松开按键再按下 t. 这个组合键会 显示 Emacs 内置的教程,这也是你应该查阅的东西。

不要使用方向键或者是鼠标,虽然它们可以在 Emacs 下使用,但是你应该给你自己一周 的时间来熟悉 Emacs 的跳转命令。一旦你对使用 Emacs 的跳转有了肌肉记忆,你就会 享受它们,并且在 Emacs 之外的任何地方都会无比想念 Emacs 上的按键。 Emacs 内置 的教程在引导新手使用 Emacs 上做得非常好, 但是我还是会对教程进行总结,所以你也 无需阅读全部的教程。而枯燥的事就是当你不使用方向键移动的时候,你需要使用 C-b(back) 后移一个字符,使用 C-f(forwar) 向前移动一个字符,使用 C-p(up) 向上 移动一个字符,使用 C-n(down) 向下移动一个字符。你可能会在想,我究竟为什么要放 着现成的很好好的方向键不用,而要去使用这些快捷键来移动呢?有若干个原因,我将 为你一一道来:首先,你不需要离开你正在打字的位置,就可以使用 alt(以 Emacs 的 语来说,是 Meta 键)一次性向前或者向后跳转一个单词了。事实上,这比你预想的要方 得多。第三个理由就是,如果你想重复一个命令若干次,你只需在命令前加上相应的次 数。我经常在编辑文档的时候使用这个功能来预判我要后退多少个单词或者是要向上下 移动多少行,例如 C-9 C-p, 或者是 M-5 M-b. 另外一个非常重要的跳转命令就是跳转 到开端(a) 或者是结尾(e)。使用 C-a|e 跳转到行首或者行尾,或者使用 M-a|e 跳句首 或者是句尾。如果你希望句首句尾的跳转能正常工作,你就需要在 "." 后加上两空格, 不然 Emacs 无法正确识别句子的结尾,这同时也大脑提供有用的选项,详情查看 这篇 文章. 如果你需要把文档导出到单空格的 发布环境, 你可以快速地为这项工作编写一个 宏。一般而言,阅读 Emacs 自带的教程都会有所裨益的。而对于那些没有耐性看教程的 读者,我也会为他们阐述那些重要的命令的,但是最好的还是教程。谨记:C-h t 调出 教程。

2.3 Learn To Copy and Paste

你可以在 Emacs 中调用 CUA mode, 这样 Emacs 就会以你熟悉的方式进行工作了,但是 原生的 Emacs 真的很棒,并且非常容易上手,只要你愿意花费一点时间学习它。你通过 使用 Shift 键和跳转命令标记一部分区域(就好像你用鼠标选定那样); 例如使用 C-f标 记鼠标前的一个字符。你用 M-w 来复制,使用 C-w 来剪切,然后使用 C-y 来粘贴。如 果用 Emacs 的术语来说,这叫做 killing 和 yanking, 但是这个跟 cut (剪切)和 paste (粘贴) 是很像的。在 kill ring 下面的钩子是拥有魔力的,不过现在你只需要 考虑复制,剪切和粘贴的问题。如果你已经开始自己摸索用法了,你可以使用 C-x u 撤 销命令,以防出现事故。

2.4 Next, Learn Ido Mode

相信我,Ido 可以让你更容易跟文件打交道。你无需在 Emacs 里面使用一个单独的 Finder|Explorer 文件管理器来操作文件。取而代之的是,你可以使用编辑器的命令来 进行 创建,打开,保存文件。如果没有 Ido, 这样的工作会相当的痛苦,所以我建议在 学习其他东西之前先安装 Ido. 从 Emacs 22 开始,Ido 便内置在 Emacs 上了,如果你 想折腾一下你自己的 Emacs 配置的话,Ido 也总是可用的。这也是你折腾自己 Emacs 环境的一个很好的起点。

Emacs 中大部份的特性都以 mode 的形式呈现。如果你想安装社区提供的 mode 的话, 你需要做两件事。好吧,开始你还需要做一点额外的工作,但这些工作只需要做一次, 之后就真的是两件事了。额外的事情就是你需要准备一个单独存放 elisp 文件的空间并 且告诉 Emacs 这文件空间到底是哪里? 我建议你使用 Dropbox 为你的 Emacs 目录创 建一个文件夹。在 Emacs 目录里面创建一个 .emacs 文件和一个 .emacs.d 文件夹。 在.emacs.d 文件夹里面新建一个叫 lisp 的目录。现在你的目录看起来就是这样的:

home
|
+.emacs
|
-.emacs.d
|
-lisp

然后你就可以把各种 mode 的 .el 文件放到 home/.emacs.d/lisp 目录,然后在.emacs 文件里面指明这一点:

(add-to-list 'load-path "~/.emacs.d/lisp/")

Emacs 自带 Ido mode, 所以你无需把 Ido mode 的 .el 文件放到你的 Lisp 目录,不 过很快你就需要把其他东西添加到 Lisp 目录的了。

2.5 Symlinks are Your Friend

等等,这就是说 .emacs 文件和 .emacs.d 目录都是在你的 home 目录,然后我们只需 要把它们都放到 Dropbox 的一个目录里!没错,这样就很容易实现在任何地方都可以拥 有你自己的环境了。把所有的东西都保存到 Dropbox 上,然后使用符号链接把 .emacs 和 .emacs.d 链接到 OS X 的 "~/." 下, 在 OS X 下使用 ln -s 可以非常容易实现, 但是在 Windows 下,这就是个噩梦。幸运的是,Emaca 提供了在 Windows 实现符号链 接的其他选择,那就是 HOME 环境变量。进入 Windows 环境变量设置(对于 Windows 10 而言,你可以按下 Windows 键,然后输入 "Environment Variables" 通过搜索找到设 置,这是 Windows 最好的功能了), 然后在你的帐号之下创建一个指向 Dropbox 为 Emacs 创建的文件夹的命名为 HOME 环境变量。如果你想更容易地浏览不在 Dropbox 里 面的本地文件的话,你可能需要在你的 home 目录下新建一个符号链接链接到 Dropbox Emacs home.

现在你已经完成了让所有的机器都指向你 Emacs 的配置文件的准备工作了。如果你在使 用一台新的电脑或者是使用别人的电脑一个小时,或者是一天,你都可以使用你自己的 完整的工作环境。可能第一次操作会有点困难,但是,当你知道怎么操作之后,这最多 只会花费你 10 分钟。

回到之前我们还在配置的 Ido…

C-x C-f 然后键入 ~.emacs RET RET/ 来创建你的 .emacs 文件。 然后添加下面这些内容 :

;; set up ido mode
(require `ido)
(setq ido-enable-flex-matching t)
(setq ido-everywhere t)
(ido-mode 1)

打开 .emacs 缓冲区,然后执行 M-x evaluate-buffer 命令,如果你不小心改动了某 些东西,就会出现错误, 一切正常的话,Ido 就可以正常工作的了。Ido 改变了操作文 件时 minibuffer 的工作方式。虽然已经有很多关于 Ido 的文档了,但是我还是想分享 几点小技巧。有效使用 ~/; 你在 minibuffer 的任何位置输入 ~/, Emacs 都会跳 转到 home 目录。这就意味着,你最好尽可能地把文件放到靠近 home 目录的地方。我 用 "~/org" 来放置所有与代码无关的东西,而用 ~/code 放置所有与代码有关的东西。 你在一个目录的时候,你就经常会发现你有各种不同扩展名的文件,特别是你使用 Org mode 并用它来发布东西的时候。你可以输入点号 ".", 然后无论你想要的扩展文件在哪 里,Ido 都可以帮你通过扩展名来缩小范围以找到文件。例如,当我在Org-mode 里面编 写博文的时候,主文件就是 ~/org/blog/emacs.org. 我通常都是使用 Org-mode 的发 布系统把博文转化成 HTML 文件, 这样,在相同目录下我就会得到一个 emacs.html 文 件。 而都为打开这个 Org 文件的时候,我会输入 C-x C-f ~/o[RET]/bl[RET].or[RET]

[RET] 是指我在 Ido mode 下按下回车来实现自动补全。所以,我只需输入 12 个字符, 如果你习惯了这样的用法,你就会觉得这比 在 Finder|Explorer 使用鼠标点击打开文 件所花费的时间少得多。Ido 真的非常有用,是真的可以优化 Emacs 操作的工具集。现在 就让我们来探讨一下其他有用的 mode

2.6 Fonts and Styles

我推荐你在 Emacs 中使用那些优秀的输入系列字体。它们可以被定制成适合括号,点号 以及其他的字符。你也可以为那些字体文件打造额外的行距。我推荐使用 1.5 倍行距, 并且使用它们的比例字体来编写代码和处理数据。我使用 Serif 字体来进行协作,而 且它给人一种时髦,现代的感觉。你可以在 http://input.fontbureau.com/ 找到这种 字体,你可以可以按照你自己的喜好自定义字体。在 Emacs 里你可以使用菜单来设置字 体,但是 Emacs 只是把菜单设置对应的代码放到你的 .emacs 文件而已。此外,如果你 使用不同的设备,你可能想要不同的设置。我会把我的 .emacs 文件配置成可以通过名 字来确定我正在使用的机器并且为其配置合适的显示选项。代码如下:

;; set up fonts for different OSes. OSX toggles to full screen.
(setq myfont "InputSerif")
(cond
((string-equal system-name "Sampo.local")
(set-face-attribute 'default nil :font myfont :height 144)
(toggle-frame-fullscreen))
((string-equal system-name "Morpheus.local")
(set-face-attribute 'default nil :font myfont :height 144))
((string-equal system-name "ILMARINEN")
(set-face-attribute 'default nil :font myfont :height 106))
((string-equal system-name "UKKO")
(set-face-attribute 'default nil :font myfont :height 104)))

你需要在你的 Emacs 上运行 (system-name) 函数,并把结果代替上面/system-name/ 的变量值。需要注意的是,在 Sampo (作者的 Macbook)上,我把 Emacs设置成全屏。我 也喜欢在 Windows 上这么干,但是 Windows 和 Emacs 真的不是真爱,当我在 Windows 折腾 Emacs 全屏的时候,总会出现各种奇怪的问题。所以我只好在Emacs 启动以后,手 动全屏。

我还建议去掉那个丑丑的工具栏,它会让 Emacs 在做一些炫酷的事情的时候看起来却像 在上世纪 90年代一样。我还去掉了 Emacs 其他的一些边边角角,这样我就有一个简单 有效率的用户界面了。把下面这些代码加入你的 .emacs 文件以去掉工具栏和滑动条, 但是还保留菜单栏 (在 OS X, 除非你把鼠标移动到 Emacs 的屏幕上,不然它的菜单栏 是隐藏的。)

(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
(if (fboundp 'menu-bar-mode) (menu-bar-mode 1))

2.7 Org mode

我真的差不多是生活在 Org-mode 里面。它是我用来编写文档,记笔记,标记待完成事 项以及处理 90% 其他工作的环境。Org 最初是被一个开会也会带着笔记本电脑的哥们设 计成用来做记录笔记和待办事项的工具集。我并不赞同开会使用笔记本电脑,我也不会 这样做,所以我的使用场景就跟他有点不同。对于我而言,Org 是一种处理所有内容结 构化的工具;它们都有标题和子标题等等。在 Org mode, 它们像大纲条目那样工作。 Org-mode 允许你展开或者折叠树状结构的内容或者是重新组织树结构。这个工作方式跟 我的思考方式很契合,所以我使用 Org-mode真的使用得很愉悦。

Org mode 还有很多让你的生活变得愉悦的细节。例如,Org-mode 处理注脚真的做得很 好,而且它的 LaTeX/PDF 输出也非常好。Org 可以根据你文档中所有的待办事项为你生 成日程表,并且以非常友好的方式关联到日期或者具体时间。如果想要安装 Org-mode, 只需要把 org-mode.el 添加到你的 Lisp 文件夹,并添加以下的代码到你的 .emacs 文 件,以下的代码可以让你根据树状结构的位置进行缩进,并且在打开文件的时候全部展开:

;; set up org mode
(setq org-startup-indented t)
(setq org-startup-folded "showall")
(setq org-directory "~/org")

最后一行代码的意思是告知 Org 在什么地方寻找显示在日程表中或者是其他程序中的文 件。我在 home 目录保存我的 Org 文件,即我在上面提到的用符号链接链接到 Dropbox 里面的文件夹。

我有一个总是在缓冲区中打开的 stuff.org 文件。我把它当作一个笔记本那样使用。 Org 可以很容易地提取带有截止日期的 TODOS 或者是其他事项。当你在 Org 里面内嵌 了 Lisp 代码,并且随时可以运行代码的时候,你就会发现 Org-mode 特别有用。在各 种内容的文字里面包含代码也真的非常方便。重申一下,只要你可以接触到安装了 Emacs的电脑,你就可以释放 Emacs 的 "洪荒之力"。

2.8 Publisning with Org Mode

我很在意我的文档的格式和外观。我最开始是以设计师的身份开启我的职业生涯的,我 也觉得信息是可以并且应该以一种清晰美观的方式展示出来的。Org 通过 LaTex 可以很 好地生成 PDF, 而 LaTex 它有一定的学习曲线,不过它做的工作还是很简单的。

如果你不想使用 LaTex 默认的字体和风格,你需要修改某些配置。首先,你应该使用 XeLaTex, 这样你就可以使用通用的系统字体而不是 LaTex 指定的字体。其次,你需要 把以下代码添加到 .emacs :

 (setq org-latex-pdf-process
("xelatex -interaction nonstopmode %f"
   "xelatex -interaction nonstopmode %f"))

我把这些代码放到我 .emacs 文件中有关 Org 部分的结尾以保持代码整洁。Org-mode 也允许你从 Org-mode 发布文档的时候使用更多的格式化选项. 就以我经常使用的选项 为例:

#+LaTeX_HEADER: \usepackage{fontspec}
#+LATEX_HEADER: \setmonofont[Scale=0.9]{Input Mono}
#+LATEX_HEADER: \setromanfont{Maison Neue}
#+LATEX_HEADER: \linespread{1.5}
#+LATEX_HEADER: \usepackage[margin=1.25in]{geometry}

#+TITLE: Document Title Here

你只需把上面的选项配置放到你的 org 文件的任意地方。我们公司文档主体部分的字体 是 Maison Neue, 但是你可以修改成你想要的任何字体。我强烈不推荐使用 Maison Neue. 这真的是糟糕透了的字体,所有人最好都不要使用它

本文就是使用以上配置输出的可以充当范例的 PDF。这就是 LaTex 开箱即用的样子。除 了字体有点枯燥以及奇怪之外,其他的我感觉都挺不错。如果你使用标准格式,人们会 觉得他们在阅读的是一篇学术论文。记住,我已经警告过你了。

2.9 Ace Jump Mode

Ace Jump Mode 表现得更像一颗璀璨的宝石而不是一项特性,而这可能正是你所需要。 这就好像 Jef Raskin 9 以前的电脑的跳转功能一样。它工作的方式就是在你按下 C-c C-SPC 后,输入你想跳转的单词的首字母。然后它会高亮所有出现该字母的单词, 然后覆盖一些字母在那些单词上。你需要输入那些覆盖在你想跳转到的单词上面的字母, 接着你的光标就会跳转过去。我发现我自己使用 Ace Jump Mode 的频率和那些内置的跳 转和搜索命令的频率一样多。 把 Ace Jump Mode 的 .el 文件下载到你的 Lisp 文件目 录里,然后把下面的代码放置到 .emacs 文件里:

;; set up ace-jump-mode
 (add-to-list 'load-path "which-folder-ace-jump-mode-file-in/")
 (require 'ace-jump-mode)
 (define-key global-map (kbd "C-c C-SPC" ) 'ace-jump-mode)

3 More Later

对于一篇文章而言,内容已经足够多了--这篇文章应该可以引领你走入 Emacs 的世界。 我也很乐意听到你在编程以外的工作中使用 Emacs (或者在编程使用 Emacs) 以及 Emacs 是否可以高效完成这些工作的见解和感受。可能我在使用 Emacs 中有某些不当之处,我 也希望你可以指出来,我会很感激你的。我可能会更新关于介绍其他 mode 特性的文章。 在我们为 Lugue 开发出更多有用特性,而不止是代码高亮的时候,我自然会为你们展示 如何结合 Fugue 和 Emacs 以及 Ludwig-mode 来使用。如果你有想法的话,你可以在 Twitter 上,发送到 @fugueHQ

Footnotes:

1

如果你是某种程度上的 PHB, 但是并未接触过技术, Emacs 可能就不适合你了。 虽说总是有少部分非技术的 Emacs 用户在使用 Emacs 之后走上了技术之路,但这些终 归是少数人。使用 Emacs 可以帮助你了解如何使用 Unix 或者 Windows 的终端,或者 是编辑一两个配置文件,抑或是为你的生活编写某些代码。这才是使用你使用 Emacs的 "正途"

3

我通常在写作的时候使用这项功能来进行计算。例如,当我在给一位新的员工撰写 offer 的时候,我想计算一下在这封信里面到底有多少个选项。因为我在 .emacs文件里面 有一个定义流通股份 (outstanding-shares) 的变量,我只需按下 M-x (*.001 outstanding-shares), 就可以在无需打开计算器或者是 Excel 的情况下得到十分之一点了。 我把很多数字都像这样保存在变量中,这样我就无需频繁进行切换了。

4

这部分遗漏的就是 web. Emacs 有一个叫做 eww 的网页浏览器可以让你在 Emacs 里面浏览网页。事实上,我就在使用它,它不仅可以很好地屏蔽广告,还可以去掉大部份糟 糕的网页设计。这有点像 Safari 里面的阅读模式。令人悲哀的是,大部份网站都有各种烦 人的东西并且都不能把基于鼠标的导航跳转很好地转化成文本 (译者注:eww 是一个基于文 本的浏览器)

5

可用性经常与可学习性混淆。可学习性是指学习一个工具有多难。可用性是指一个 工具有多有用。通常这两者的关系都是成反比的。就以菜单和鼠标为例。菜单非常容易学习, 但是可用性就非常差,所以最开始的时候菜单总是伴随各种的快捷键。Raskin 在忽略图形 化界面的很多观点都是正确的。最近各种操作系统都添加了例如查找最近文件或者其他命令 的快捷键。在 OS X 和 Windows 上,我进行跳转的默认方法就是搜索。Ubuntu 的搜索糟透 了,真的变成它的图形界面多余的部分了

6

亚马逊的 AWS S3 解决了互联网诞生以来一直存在的文件存储问题。数以 T 计的文 件都被保存到了 S3 里面去,并且没有数据曾发生过丢失。现在几乎所有提供存储功能的云 服务都是在建立在 S3 之上,或者是模仿 S3 的. 也没有任何规模比得上 S3 的服务,所以 我通过 Dropbox 把重要的东西保存到上面去。

7

到目前为止,你可能在想,"这人和自行车到底是在指什么" 我爱着自行车的方方面 面,它们是有史以来,最有效的机械运输方式。它们是有着真正美的物体。在某种程度 而言,它们的美贯穿着它们的生命周期。我在 2001 年就拥有一辆 Rivendell Bicycle Works, 现在我每次看到它,我都会很开心。自行车和 Unix 是我接触过最好的两个发明。 好吧,是它们,还有 Emacs.

8

这不是 Emacs 的教程。Emacs 已经有一份内置的优秀教程。我会在博文中谈及那些 关于配置 Emacs 的最重要的技巧,但是无论怎样,它都不能取代 Emacs 的教程

9

在上世纪 80 年代,在他带领的 Macintosh 项目上和 Steve Jobs 产生冲突之后, Jef Raskin 设计了 Canon Cat 电脑。Canon Cat 电脑拥有以文档为中心的接口 (其实 这才是所有电脑该有的样子)并且使用了和 Emacs 类似的按键创新。如果你有一台跑着 Unix 系统并配置有高分辨率大屏的现代 Canon Cat 电脑,我愿意马上用我的Mac 和你 交换。 https://youtu.be/o_TlE_U_X3c?t=19s