「油管Rosseta」Emacs For Writers
- 视频链接:Emacs For Writers
- 博主链接
引言
本篇内容整理自Jay Dixit的讲座“Emacs For Writers”。Jay是一位科学作家,并非专业程序员,他在讲座中分享了自己作为一个写作者,如何以及为何选择使用Emacs这一强大而通常与编程联系在一起的文本编辑器。讲座的核心围绕着他在撰写复杂非虚构书籍时,遭遇传统写作工具(如Microsoft Word和Scrivener)在结构组织和信息管理上的局限性,进而踏上寻找更高效解决方案的历程。
Dixit详细回顾了他从发现Emacs及其Org mode,到克服初期学习困难,最终成功将其定制为符合个人需求的写作环境的过程。他具体展示了如何利用Org mode进行大纲构建、内容管理、快速导航和多种格式导出(包括HTML演示文稿和高质量PDF),并介绍了如abbrev-mode
(缩写输入)、集成搜索、邮件处理、版本控制等一系列提升写作、研究和个人知识管理效率的Emacs实践技巧。
内容纲要
Emacs For Writers - Jay Dixit 讲座纲要
├── 引言:一位非程序员作家的Emacs之旅
│ ├── 讲者介绍:Jay Dixit (科学作家, 非程序员)
│ └── 讲座目的:分享作为作家使用Emacs的原因、方式及益处
├── 探索历程:寻找理想的写作工具
│ ├── 早期计算机接触
│ │ ├── 父亲的Unix终端与邮件脚本
│ │ └── 学习打字与文本冒险游戏 (Zork, Hitchhiker's Guide)
│ ├── 使用 Microsoft Word
│ │ ├── 早期写作与笔记(PowerBook)
│ │ └── 习惯大纲式思考
│ ├── 写作瓶颈出现
│ │ ├── 撰写心理学书籍遇到困难
│ │ └── Word难以管理复杂结构与信息
│ ├── 尝试其他工具
│ │ ├── WorkFlowy:喜爱大纲,但速度慢、键盘支持不足
│ │ └── Scrivener:结构/文本分离,但鼠标依赖、界面混乱、增加焦虑
│ └── 明确需求:结合WorkFlowy键盘效率与Scrivener视图分离的工具
├── 遇见Emacs:发现与学习
│ ├── 论坛求助 (`outlinersoftware.com`)
│ │ └── 具体描述需求:左侧键盘编辑大纲,右侧文本编辑
│ ├── 关键回复 (来自JB)
│ │ └── 推荐 Emacs Org mode + 特定技术 (indirect buffer, split screen等)
│ ├── 初学挑战
│ │ ├── 感觉复杂、"可怕"
│ │ ├── 不懂基本命令行操作 (make, install)
│ │ └── 承认自己是完全的新手
│ └── 坚持与成果
│ ├── 通过学习和请教,成功配置环境
│ └── 实现理想的“左大纲-右文本”联动编辑视图
├── Emacs写作实践:核心功能与技巧
│ ├── 核心工作流 (Org mode)
│ │ ├── 键盘驱动的大纲编辑 (层级调整、移动)
│ │ └── 大纲与文本实时同步
│ ├── Org Mode 特性运用
│ │ ├── 大纲编辑 (折叠、移动、`org-bullets-mode`)
│ │ ├── 文本注释 (`#` 注释写作想法)
│ │ ├── 内容管理 (`palimpsest mode` 发送文本至末尾)
│ │ └── 导出功能 (HTML幻灯片, LaTeX转PDF, 提交Word需处理)
│ └── Emacs 通用优势
│ ├── 强大的搜索与替换 (跨文件, 正则表达式)
│ ├── 纯文本与无干扰环境
│ ├── 高度可定制 (尤其键盘绑定)
│ └── 速度与效率 (对比Word的低效)
├── 拓展功能与生态:Emacs 不仅仅是编辑器
│ ├── 邮件客户端 (`notmuch`)
│ ├── 缩写模式 (`abbrev-mode`):极大提高输入效率
│ ├── 集成搜索 (Google, `Helm swoop`, `Helm AG`/`rg`)
│ ├── 特定文本格式支持
│ │ ├── Fountain Mode (电影剧本格式化)
│ │ └── Poetry Mode (诗歌辅助:音节, 押韵)
│ ├── 信息捕捉 (Org Capture)
│ ├── 版本控制与备份 (Git, Dropbox, 硬盘)
│ ├── 窗口与文件管理 (`buffer-stack`, `helm-recentf`, `Projectile`)
│ └── 配置管理 (使用Org mode编写`.emacs.d`配置)
├── 反思与比较:Emacs适合谁?
│ ├── 与其他作家对比 (G.R.R. Martin - WordStar, N. Stephenson - Emacs)
│ ├── 对Emacs的看法
│ │ ├── 学习曲线陡峭,耗时耗力
│ │ └── 配置过程复杂,依赖社区与复制代码
│ ├── 推荐建议
│ │ ├── 不轻易向普通作家推荐
│ │ └── 对技术要求不高的作家或推荐 `nvALT`
│ ├── 协作问题 (通常导出后协作)
│ └── 个人选择:尽管复杂,但满足了需求
└── 问答环节 (Q&A)
├── 大纲视图与文档关系 (是同一文档的不同视图)
├── 右侧编辑是否同步左侧 (是)
├── 最重要的工具/定制 (键盘绑定, 导出, 搜索, `abbrev-mode`等)
├── 是否使用原版Org mode (否, 大量定制)
├── 协作方式 (导出HTML/邮件, 非直接共享Org)
├── 缩写冲突处理 (`Meta+Space`不展开)
├── 备份策略 (Git, Dropbox, 硬盘)
├── 其他作家对其工作流的看法 (好奇, 震惊, 未深入交流)
├── 推荐给其他作家的工具 (`nvALT`)
├── 笔记与想法的组织搜索 (`Org Capture`, `Helm swoop`, `Helm AG`)
├── 为何从Aquamacs换到GNU Emacs (社区支持, 自行实现功能)
├── 参考文献管理 (手动脚注, 非数据库)
├── 网页引用方式 (自定义函数抓取URL和标题)
├── 自定义窗口标题的原因
└── Emacs配置分享 (GitHub)
Emacs For Writers
一、 引言:一位非程序员作家的Emacs之旅
我的名字是Jay Jay Dixit。我使用Emacs,但我不是程序员,我几乎写不出一行能救命的代码。我是一名作家和记者,主要是科学作家,我写关于心理学的文章。我曾在一家名为《今日心理学》(Psychology Today)的杂志工作。我做的另一件事是教授写作和讲故事,我有一家公司叫“纽约作家强化班”(New York Writers Intensive)。这就是我。
今天我要和大家谈谈,作为一个作家和研究者,我是如何以及为何使用Emacs的,它如何帮助了我。我想,最好的解释方式是先给大家讲讲我接触Emacs的故事,为什么我喜欢它,它对我有什么吸引力,以及我当初是如何找到Emacs的。
二、 探索历程:寻找理想的写作工具
这是我的第一台电脑。嗯,严格来说它不属于我,它属于我父亲所在的大学。他是一位物理学家,经常出差。所以当他外出旅行时,他会去瑞士,那里在CERN有一个大型粒子加速器,他会去那里做他的实验研究项目。所以他每次会离开几周。这实际上是在Gmail、Hotmail或任何类似服务出现之前。他实际上创建了一个基于Unix的……我想应该算是个脚本吧,我们通过登录他的账户,就可以像用一个临时的邮件系统一样收发信息。所以,我实际上是在这样一台机器上学会打字的。
然后,我们用这个连接——当我父亲不在家的时候。我本来想让它播放那个“握手”的噪音,但我没搞清楚怎么把它整合到演示文稿里。但确实是真的,我们确实是用拨号电话拨号,然后使用调制解调器的静音盖(modem muffs)。
嗯,我想大家可能看不清屏幕上的文字了,分辨率不够高。哦,你能看清?很好。屏幕有点曲面,是的,那时候就是那样的。所以,这是我在父亲外出时给他写的信。我就是这样学会打字的。
还有这个东西,也在同一个终端系统上,在我们的系统里它叫Dungeon,但可能更广为人知的名字是Zork,最早的文本冒险游戏之一,也许就是最早的那个。过了一段时间,我又有了一个基于我最喜欢的小说(至今仍是)《银河系漫游指南》的游戏。所以我也玩那个游戏。每天放学后,我就在那里不停地打字。但我并没有做任何编程。所以即便在那时……
等到我真正拥有第一台属于自己的电脑时——那不是一个终端,因为我无法访问任何Unix之类的东西,当我用我父亲设置的终端时——这是我的第一台电脑,一台PowerBook。在那上面,如果有什么像Emacs这样可以捣鼓的东西,我并不知道,从未听说过。所以我用的是Microsoft Word。我用它来写论文。而且我学习的时候,会整理课堂笔记,创建一个大的提纲,整个学期的大纲,包含每节课和主题,然后用不断增加的缩进级别来表示层级结构。我想这就是我的思维方式,我总是倾向于用大纲思考,那似乎是我的模式。
所以我一直在用Microsoft Word。Microsoft Word也在发展。在大部分时间里,它对我来说都还行。我不记得当时介意过它,也不知道还有其他不同的选择。直到最近几年,我决定写自己的书——研究并撰写一本关于无意识心理学的非虚构心理学书籍,关于我们如何在爱情、性和约会中基于心理学研究做出决定和选择。这本书我其实还在写。
但一旦我开始写这本书,我意识到我无法用Word来完成。我需要更好的方式来组织它。因为事实上,写这本书过程中最难的部分,至今仍然是,弄清楚整本书的结构。信息量太大了,难以驾驭,很难在我的脑海里一次性地构思清楚。所以我需要一种方式来呈现它、摆弄它、操纵它。
我意识到我需要一个不同的解决方案。于是我做了我通常会做的事:去Google搜索,“嗯,写作用的好的大纲工具是什么?” 我找到了一些不同的解决方案。其中一个是叫做WorkFlowy的工具,我非常喜欢它,现在仍然喜欢。你们有些人可能知道,它就是一个大纲工具,层级列表,所有东西都是列表。我想你可以……是的,你可以添加一些不是列表形式的文本,可以给列表项添加备注,但主要内容总是列表形式。你只需要不断增加缩进,深入概念的层次。我喜欢这个,但它不太适合用来写我的书。它是一个基于Web的工具,有点慢,而且它缺少……尽管我在Mac上长大,但我一直算是个高级用户,会用很多键盘快捷键。这个工具没有,全是鼠标操作,拖拽,花费很长时间。我觉得这也不行,用它写一本300页的书是行不通的。
所以我又去Google搜索,找到了另一个工具:Scrivener。不知道大家是否听说过。它是个有趣的工具。它的工作方式是:右边窗格是文本,左边窗格是像文件夹和文件那样的……该怎么称呼?就像Windows资源管理器风格的界面。你可以通过拖放来重新排列。比如你想,“哦,我想把这一节移到这一章的开头”,你可以做到。但同样,它很慢,而且全是鼠标拖放操作,我不喜欢。
而且,我不知道,它对我来说显得很忙乱。它看起来不……它不像那种……这也是在“无干扰写作环境”开始流行的时候,我觉得这简直是反其道而行之,全是干扰,视觉上非常混乱。我不喜欢用它。我总是觉得,面对我那庞大的书籍主题,我已经有不堪重负的问题了,而我觉得这个工具没有帮助,反而让我对信息量之大以及试图将其整理成连贯大纲和层级结构感到更加焦虑。所以我决定我也不想要这个。
在WorkFlowy和Scrivener之间,我大概能描述出我想要什么了。我知道我想要什么。我就想,要是有一个工具,能介于WorkFlowy和Scrivener之间,并且能做到这样那样就好了。
三、 遇见Emacs:发现与学习
我的下一步是,我意识到我需要一个更好的解决方案。我首先求助于Google,但没帮上忙。所以我去了论坛。(这里有个洋葱新闻标题:互联网男子差点儿陷入DIY芥末酱爱好者世界。说的是他开始搜最好的芥末酱,然后发现一个关于芥末酱的论坛,开始发帖,阅读所有关于不同种类芥末酱的帖子,成了活跃用户,然后在某个时刻他想:我在干什么?这不是我啊。)这肯定发生在我身上好几次了,我现在站在这里可能是在做一个关于不同种类搅拌机、最好的绿色冰沙搅拌机、它们也能做汤、Blendtec对比Vitamix以及所有价格的演讲。因为当我决定买搅拌机时,我就……这就是我所做的,我猜,我成了这方面的专家。
所以我去了论坛,发了我的帖子,一切就从这里开始了。这是我最初的邮件,我要读给你们听,因为我觉得这是……是的,这是我的转折点。首先,它在一个叫做 outlinersoftware.com
的论坛上。我想,我需要一个大纲工具,这是个好的起点。主题是:“左窗格大纲,右窗格文本”。
以下是我写的内容:“大家好。有没有一款应用程序,可以在左窗格显示键盘可编辑的层级结构,在右窗格进行文本编辑/文字处理?我正在寻找一款Mac或基于Web的应用,允许我在左窗格以多级项目符号列表的形式创建和修改层级结构(我写得多么具体啊,对吧?就像,我不如把我梦想中的愿望清单上所有想要的东西都列出来),并在右窗格进行文本编辑/文字处理。我希望能将WorkFlowy和Scrivener合二为一。Scrivener的好处是:它在左窗格显示我文档的层级结构(包含标题、子标题、子子标题等),并在右窗格显示文本编辑器/文字处理器。Scrivener的问题在于:创建新部分、移动部分、将一个部分嵌套在另一个之下等等操作都很麻烦。每次你想要一个新的层级,你都得选择‘新建文本’(就像用鼠标拖动,鼠标移动到菜单),命名它,然后用触控板而不是键盘把它拖到你想要的位置,等等等等。WorkFlowy的好处在于……”——所以在这里,我想要一个像WorkFlowy那样,“基于键盘快速编辑和修改”的工具。我准确地描述了我想要什么,对吧?
我收到了一些回复,但没有一个很有帮助。比如有个人说,“我以前用MORE做这类事情,发现它很适合……但我不知道Mac上是否有。近年来开发稀少且不稳定。但你可以免费试用。” 另一个人说,“楼主(OP,指我)问的是在现代大纲应用程序中很难找到的东西,在Mac上更难。大多数……”他描述了我想要的东西,然后说,“是的,你找不到的。”还有人说,“关于……哦,我同意另一位发帖者的看法,Tree是个不错的选择,虽然笔记是内联的,而不是像原帖主请求的那样在单独的右侧窗格中。” 所以,没戏。
但是,然后,我收到了一个来自名叫JB的人的邮件。他说:“你可以在Emacs Org mode中做到这一点,通过使用间接缓冲区(indirect buffer)、垂直分屏(vertical split screen)和可见性循环(visibility cycling)。一切都通过热键处理。它适用于Mac。我经常在处理较长文档时使用这种模式。” 什么?等等?这是可能的?我的天哪!我简直不敢相信有人设计了一个完全符合我需求的工具。当时我几乎不知道,我基本上得自己设计它,或者说,在数年时间里定制它,使之成为我想要的样子。
所以我立刻回信:“JB,来自Emacs Org mode的建议听起来是个很棒的解决方案。我很感兴趣。它看起来也有点复杂(这是我一生中最大的轻描淡写),但如果它真的能做到我所描述的一切,那么我愿意接受学习曲线。我已经下载了Emacs和Org mode。你能描述一下如何设置它来实现这个功能,或者指引我到一个能提供帮助的资源吗?” 他告诉了我。
于是我就去安装了。我想让大家听听这封邮件,因为这是刚开始时的我,一个非程序员,一个从未用过Unix的人,一生都在用Microsoft Word、Scrivener和Gmail。我说:“嘿,Joseph(哦,他把邮件地址发给我了,所以我现在给他发邮件),谢谢你关于Emacs Org mode的建议。我正在提醒他我是谁。它看起来有点吓人,但我准备试试。我正试图开始,但卡住了,想知道你是否能帮我。我已经在Mac上安装了Emacs和ErgoEmacs(我真的什么都不知道)。现在我需要安装Org mode。我下载了Org mode,正尝试安装。文档只是说要安装Org mode,编辑Makefile,输入make
,然后make install
。要创建PDF和HTML文档文件,输入make doc
。但是我应该在哪里输入这些东西呢?在终端(Terminal)里吗?(我知道我笔记本上有个叫终端的应用)我应该以某种方式在Emacs本身里面输入它们吗?还是在Emacs里会得到一个提示符,让我可以输入命令?” 这是……这是2011年。是的,我想是的。
那就是我。“我应该在哪里输入这些东西?” 我当时甚至都不知道。我绝对是这些人中的一员(指着一张表示困惑或新手的图片)。但每个人都得从某个地方开始。
随着时间的推移,我弄明白了。最终我让它工作起来了。我不知道你们能看多清楚,但这是我用Org mode为我的书做大纲。我最终弄清楚了如何做到我最初描述的那样:两个窗格,右边是文本,左边是我的大纲,它是可编辑的、层级的,我可以用键盘移动层级中的标题。所以我做到了。
四、 Emacs写作实践:核心功能与技巧
问: 关于那个(指Org mode 大纲视图),当你移动的时候,它只是显示不同的文档吗?
答: 实际上这是一个大的文档。那些是我指向书签的指针吗?不,它们实际上是我书里也会有的标题。它们就像……是的,那些是标题。你知道,这些标题中的一个是……
问: 当你在Org mode中移动段落时,那是如何工作的?
答: 我稍后会演示Org mode。我会向你展示它是如何工作的。但它的工作方式正是我想要的。我……我马上会打开Emacs,向大家展示我做什么以及怎么做。但它能满足我的需求。
我的一个技巧是,我不知道大家能不能看到这些……你们不叫它们hashtags……是叫octothorpes,对吧?当然了,我怎么会知道呢。我实际上会给我的写作添加注释,就像你们给代码加注释一样。你们会写,“哦,这里想做这个”或者“搞不定这个”或者随便什么。在这里,我说,我有一句话,然后我说,“把这句话说得更好”。这里,我有一句话,我说(这些注释都是给我自己看的),“‘个体差异’用非心理学术语的方式怎么说?”然后我会找到答案,等我实际修改了文本后,再取消注释。
所以我仍然不太清楚我在这里做什么。我喜欢XKCD的这个漫画。他说这就是我一直以来的感受。一个人说:“请记住,我是自学成才的,所以我的代码可能有点乱。” 另一个人说:“当然,让我看看。我确定没问题。”然后看了代码说:“哇,这就像住在一个小孩只用一把斧头和一张房子的图片建造的房子里。这就像一个公司律师用一个只懂Excel公式的手机自动更正功能写的沙拉食谱。这就像有人拿了一对在宜家吵架的夫妇的谈话记录,然后随机编辑,直到它能编译通过而没有错误。” 他说:“好吧,我去读一下风格指南。”
那就是我。我的大部分代码,因为我现在才刚开始学习如何编程Emacs Lisp,但在此之前,基本上都是我要么像我常做的那样Google搜索,复制粘贴代码片段,然后实验看它们是否能做我想要的事;要么就是在Stack Exchange上提问,说:“嘿,我想做这个,有人知道怎么做吗?”然后,你知道,诱使别人为我写代码。所以这就是我现在的情况。
它能用。人们总是会回答。是的,这很复杂。我相信你们都……我相信你们都看过这个一百万次了。这就是Emacs的学习曲线。我还在努力。实际上,我更喜欢另一个比这个更好的,我曾经看到一篇博客文章,叫做“如何在10年内学会Emacs”。才10年?天哪,我得赶紧报名。所以,是的,我还在学习中。这也是我来这里的原因之一,为了学到更多。但我肯定是在一个很好的群体里。
好的,这是George R.R. Martin。他不用Emacs。George R.R. Martin,写(还没写完)《权力的游戏》系列的那位。他用的是……叫什么来着?他用的是WordStar。WordStar在哪里?我有个……WordStar,是的。我有点喜欢想象,你知道,我不是唯一一个不用Microsoft Word的作家。还有其他……这是一个历史悠久、值得骄傲的传统,作家们使用其他基于文本的工具。所以这是WordStar,一个老的DOS文本编辑器。这就是George R.R. Martin用的。
旁白/听众: Word processor.
答: 对。它能完全满足他的需求,比如切换到大纲视图。是的,完全可以,给你第二个视图,但你必须知道按键。你得知道按键。是的。我没试过。我不知道。Emacs现在能做我想做的事了,所以我不会去尝试。但我喜欢这个想法,是的,我有点像他。他也……Arthur C. Clarke也曾用过WordStar。我想他可能……有过这么一件事,他说:“我想要感谢,没有这个我就不会……”我不知道是不是书的致谢,但他基本上,也许是致谢,他把一本书献给了WordStar。
另一个人是Neal Stephenson,他确实用Emacs。他有这段引述,我不知道你们是否……他是,你知道,他是使用Emacs的典型作家。他的引述是——这来自一篇更长的文章,叫做《太初有道:命令行》(In the Beginning Was the Command Line)——“在Microsoft Word中,那些工程师工时被用于诸如邮件合并和在公司备忘录中嵌入未来L Motion Pictures的功能;而在Emacs中,这些工时则以僧侣般的专注力,聚焦于看似简单实则不然的文本编辑问题上。如果你是一位专业作家——即有别人付钱来操心你的文字如何排版和打印——那么Emacs在所有其他编辑软件中脱颖而出,其方式大致相当于正午的太阳让星星黯然失色。它不仅仅是更大更亮;它简直让其他一切都消失了。” 所以,他真的很喜欢Emacs。
这是WordStar和George R.R. Martin。这部分故事的结尾注释……那是用WordStar的George R.R. Martin……还有Richard Stallman。只是说说,只是提一下。我的意思是,巧合?我不知道。
好了,这就是我找到Emacs之路以及我所寻找的东西。那么,我想现在我该做的就是启动我们最喜欢的文本编辑器,打开一个窗口,给大家展示一点。我会让这部分互动起来,所以你们应该……你知道,这部分我没有计划太多。我想你们可以直接问我你们想知道什么。
首先,你们刚才看到的那个演示文稿,就是用Emacs写的。这是一种叫做Org HTML幻灯片的东西。所以……是的,你看,这就是Org。你可以在里面放图片。很多这些都只是图片。对我来说,这是个很酷的工具。对我来说,这是……我想不是替代Microsoft Word,而是替代PowerPoint。你知道,把一张图片粘贴进去,然后还得拖到正确的位置,再用那个调整大小的东西调整尺寸,这有多烦人?我一点都不想做这些。我难道不能用一个按键就把URL粘贴进去吗?
旁白/听众: 等等,你想让电脑为你做那种无聊的工作?
答: 完全正确!完全正确!这就是我用Emacs的原因。
所以,是的,这是我的演示文稿。你们没看到,但其中一些实际上有备注,只在我的屏幕上显示。这挺酷的。
这就是我做演示文稿的方式。哦,这是我写的一篇关于叫做“市中心项目”(Downtown Project)的文章。细节不重要。但你可以看到,好的,这里我有点像在做大纲和写东西。Extra
就像一个小地方,我把一些笔记放在那里,那些是我剪切下来的。实际上我有一个工具,Patrick,我之前给Patrick看过。我有一个工具叫做……很多时候,我会发现一些文本,我觉得,“这不属于这里,我不知道……这可能就该删掉,但我不确定是否真的想删掉,而且我不想依赖版本控制以后再去找它。”所以我可以直接删掉它,然后它就永远消失了;或者我可以用一个叫做palimpsest mode
的工具,用一个按键,它就会被发送到文件的最底部。这就是那些叫做Extra
的标题的来历,它们只是……我把不需要的、不想要的文本发送到底部,这样它就不在文章本身里面了。
是的,这只是我在做大纲。回答你之前关于移动标题的问题,我可以就这样拿其中一个,然后……移动它……用键盘拖动。所以如果我想要这一节在开头,它可以到那里去。很容易。
看,我可以自动……实际上,我想要那些数字。是的,我是在最后一步添加那些数字的,当我导出到Word时,因为我必须以Microsoft Word格式提交文件。我添加那些数字,就像作为文本的一部分,来告诉他们我希望实际的文档里有这些数字。我本可以用这里的自动编号来做,但我不想费劲去设置,“哦,对所有其他的都不要导出编号”,等等。所以我只是觉得这样最简单。但是的,我确定那也可以自动化。
是的,这里是……我来展示一下我如何导出,因为这很重要。好的,所以这个……是演示文稿,它实际上只是导出为HTML,我们看到的那个演示文稿是在Chrome里。这是一个商业计划书,是我为我的公司写的,我的公司教写作和讲故事。
这同样是在Org mode里。如果我想注释点什么,我可以。“这里应该扩展一下”,或者我想说的任何话。然后我可以导出,要么导出到HTML。这里是……(打开浏览器窗口)错误的窗口。实际上让我再试一次,在那个窗口聚焦的情况下。我可以导出……我添加了一点JavaScript之类的东西——不是我写的,是我找到的——来做一个目录。是的,正是,我的救星。所以这里是HTML格式的。
我还可以……这也是很酷的部分……回到我的同一个源文件,然后我可以导出,通过LaTeX。
旁白/听众: LaTeX 发音是 Trojan is but latex can be pronounced lat orat yeah according to Leslie. (关于LaTeX发音的讨论)
答: 我不用……我不写……我不知道怎么修改LaTeX。我实际上只是在fiverr.com上雇了个人——你可以花5美元雇人——为我用LaTeX做一个模板。这处理起来要花很长时间。我可能……哦,好了。你们能看到吗?是的。
所以,这是我的商业计划书,它带有一个完整的目录和一个附录,还有页眉。我设计了这个,我告诉他我具体想要什么——基本上我在HTML和CSS里设计好,然后说:“用LaTeX实现这个。”他就做了。所以,是的,实际上是从同一个源文件导出。
然后,显然,还有很多其他我能做的事情,我甚至不知道从哪里开始。但是,你知道,我可以做……我可以跨文件搜索,这在Microsoft Word里做不到。我可以跨文件搜索和替换。Microsoft Word的搜索替换界面太糟糕了。焦点总是跑到错误的地方,你还得用鼠标移动到不同的窗口,你知道,把光标移到行首,然后做任何事情都要花很长时间。而且它只针对那一个文件。而且你也不能……如果你有不同的……它总是默认使用“打印预览模式”或“页面布局模式”,我不想要那个,我只想用“草稿模式”,就像纯文本,就像Emacs这样。但是没有全局设置可以指定“总是以草稿模式打开”。你做不到。你每次打开一个Microsoft Word文件(.doc, .docx什么的),你都得用鼠标移过去,然后选择“草稿模式”。这太麻烦了,我不想再忍受了。
所以Emacs能做我想做的事。是的,如果我想,我可以很容易地做出我的小分屏。是的,我可以……是的,我可以让这个……这是什么?克隆窗口间接缓冲区到其他窗口?(Clone window indirect buffer other window)所以现在它们是独立的。这个被展开了,这个保持不变。或者我想我实际上可以……这叫什么?聚焦(zero in)?让我的缓冲区只显示这个子树。那也很有用。或者我可以……
问: 右手边的修改会反映在左手边吗?
答: 是的,会反映。因为它必须……它们是同一个文件。看,我刚刚移动了“产品与服务”(Products and Services)。不知道你是否看到,我把它移到了“执行摘要”(Executive Summary)之前。或者,你看,这个例子会更明显。我把附录(Appendix)拿到开头。所以现在……看,我的附录是第一项。这很容易。
然后我可以,你知道,我可以搜索和替换……正则表达式(regex/rejex)。 (关于regex发音的讨论)
答: 正则表达式,这个我知道。
所以,所以我是……我不是Org mode的资深用户。但我用它写了几个演示文稿,用于导出……
问: 当我用它的时候,像顶层标题是星号(*) 空格 然后是内容……
答: 我用的是叫做org-bullets-mode
的东西,它只是稍微干净一点。因为我发现最简单的方式,或者说我认为最简单的方式来显示所有这些,是用缩进和颜色。你看,这里我可以……我可以把这个向内移动,或者,你知道,这些是不同的标题级别。但是,为什么我要……我不喜欢Scrivener,因为它有那么多杂乱的东西。那么为什么我想要额外的……显示那些星号有什么用处呢?但如果我想,我可以显示。
问: 对你来说,最重要的工具或你必须获取代码片段的附加功能是什么?
答: 是的,我用Emacs做这么多事情,以至于很难知道从哪里说起。我处理邮件。我撰写邮件。我刚刚……这不是notmuch
模式,但我最终让它工作起来了。所以,你知道,很多……我的意思是,我会说实际上最重要的事情之一是,你知道,仅仅是定制键盘绑定,这样我在屏幕上移动就难以置信地快。以至于当我不得不在Microsoft Word里工作时,我就想,“为什么所有东西都这么慢?我到不了我想去的地方。”因为,你们都知道,你的手指会形成肌肉记忆。所以仅仅是能够移动文本,可能就是我……最大的收获。而且我已经定制了那些键盘绑定,让它们适合我,并且与使用Mac以及我习惯的一些东西保持一致。诸如此类。是的,看看还有什么……
问: 你会说你主要使用的是原版(vanilla)Org mode吗?
答: 一点也不。我所有的东西都经过了大量定制。是的。所以我的意思是,那些导出……当我导出HTML时,所有这些都通过一堆东西进行了定制。
五、 拓展功能与生态:Emacs 不仅仅是编辑器
哦,这里有一个。我可以在Emacs内部Google搜索。你们看过……是的。是什么?G... Gugal?我想我上次跟你提过这个。是的,完全正确。所以你们都见过,你知道,你可以选择……你可以Google搜索某个东西,然后在Chrome中打开。你可以从Emacs内部Google搜索某个东西,然后在Chrome中打开。但如果我根本不想离开Emacs呢?我可以只Google搜索某个东西,然后让它在Org mode中显示出来。很多时候,我并不需要真的去浏览和阅读一百万样东西。我可能只需要……你知道,可能只需要第一个搜索结果的第一句话之类的,它就能告诉我需要知道的信息。
看看还能给你们展示什么。我做了很多……我做了很多abbrev-mode
(缩写模式)的东西。这是我一直在做的一件事。所以,比如 the
big
thing
about
this
is
... 你们看到我在做什么吗?我输入了 t
空格 b
g
空格 t
h
空格 a
b
空格 t
h
空格 i
s
空格... 所以,你知道,变得非常快。这在Microsoft Word里做不到。我只是不断地添加……你知道,我开始时,我想这是我的第一个缩写,当时我想,“为什么我要打这么长的单词?我知道我要说什么。”development
-> dvt
,对吧?因为我从来不需要打 bc
然后让它保持为 bc
。所以从现在开始,bc
就意味着 because
。我只是不断地添加缩写,现在我可能有几百个了。
问: 你是如何定义Emacs中的缩写的?
答: 我有一个文件在这里。并非所有这些都是我的,有些是我从一堆列表中导入的自动更正条目。但是,你知道,很多是我的。所以这里ga
扩展为game
,g
本身扩展为go
,fy
扩展为funny
,fx
扩展为for example
。末尾的数字指的是它被调用了多少次,被使用了多少次。所以,单词g
代表go
,用了291次。但如果我找到像the
这样的……有9712次我不需要打the
这个词,因为它被缩写了。
问: 你省了多少击键啊,你可能会得腕管综合症。
答: 我确实有腕管综合症。这部分解释了为什么我采用这种疯狂的缩写系统。它叫做abbrev-mode
。是的。
我还用……哦,酷。这个非常酷,我觉得很棒。
问: 我遇到的一个问题是协作。
答: 是的,我还没找到一个……好的,协作。是的,我的意思是,我通常做的就是……我导出到HTML,然后复制粘贴,放到一封邮件里。
问: Markdown 之类的?
答: 是的,这得看情况。
问: 它们再发回来?
答: 我通常不会……我没有那种需要和某人持续协作的情况。如果需要,我可能会用Dropbox,让他们……你知道,阅读Org mode源文件之类的。但通常我只是发给某人东西,他们发回来,我编辑,再发出去。当我这样做时,我通常只是粘贴到邮件里,这是最简单的方式。所以我在Org mode里工作,然后把内容粘贴到Gmail窗口,或者我就用我的Emacs邮件客户端自动完成这个操作。有一个org-mime-html
,它能把你的Org子树自动生成HTML邮件并发送出去。是的,那挺酷的。
问: 对于缩写模式,如果你真的想输入那个缩写本身(比如就想输入'bc'),怎么办?有没有什么按键或宏可以做到?
答: 是的,如果我想输入像bc
这样的东西而不让它扩展,我可以只输入……我绑定了Alt+Space
(或者我应该说Meta+Space
)来插入空格但不进行扩展。是的。
问: 你如何做备份?对于开发,我有像……或者只是……机器坏了,某些东西丢失了,我不在乎,它在仓库(repo)里。你的书,类似这样的东西……
答: 是的,我确实用GitHub。我再次强调,我不太清楚我在做什么,而且只是……但我觉得这关系不大,因为只有我一个人。你知道,我没有合作者一起协作。只有我。但这是我的书(展示GitHub仓库)。我把它……(查看提交历史)哦,你整合了很多。删除了东西,整合了提案,简化了目录结构。12天前干得不错。酷。“前往农场”,那次是个写作静修营。哇,我解决了结构问题,那是美好的一天。但是,是的,你看,这里全是我自己。我不需要任何复杂的东西。所以我只是在做……你知道,我把Git当作一种方式,就是在我……的时候做一个快照。而且,我也不必再像以前那样做了——我过去的做法是保存一个文件,然后命名为 article_v1
,article_v1-draft
,article_v1-draft-shorter-cut
,你知道,不用再那样临时凑合了。现在我可以随时进行,如果有我不想要的东西,甚至我都不想用palimpsest mode
把它发送到文件末尾,我可以就直接删除它,因为我知道它全都在这里(指Git历史)。我会做个标记,说我删除了东西,比如“删除不必要的东西”。然后,你知道,如果我更……我的一个朋友刚告诉我,我可以更复杂一点,实际使用一个标签,比如一个git标签delete
,这样我就知道我什么时候删除了一堆东西。所以,是的,我确实用Git。并且也把东西备份到我的Dropbox,而且我也做外部硬盘备份。
好的,我还要给你们展示另一个东西。叫……是叫Big Fish吗?不,也许不是fish。有个fish mode……那是什么?不。有个电影叫什么fish……谁知道是什么?不是电影?是的,是《大鱼》(Big Fish)!它就叫《大鱼》。我有一个文件叫那个名字。它就叫《大鱼》。为什么Spotlight没搜到?好的,这里。
好的,所以,文本模式。如果我输入一个剧本,这很酷。这是……好的,这是一个普通的……这是一个剧本,是那部电影《大鱼》的实际剧本。它只是文本。但是有一个模式,一个Emacs模式叫做Fountain mode,它会读取这个文本,并自动将其格式化为剧本格式。与其他编剧工具不同,我不需要……你知道,选中这个,然后去菜单说,“好的,这是角色”,然后,“这是对话”,通过菜单来做——其他编剧工具现在还是这样,或者可能有快捷键来做,但你必须手动指定。而这个模式只是解析它,因为它是文本,而且结构非常可预测。它解析它,然后把它全部转换成,你知道,剧本格式。
问: 它不让你编辑吗?
答: 是的,是的,它只是文本。我实际上可以……所以这里写着,“他母亲同情地拍拍他,然后整理他的领带。” 我的意思是,如果我想,我可以……我可以编辑《大鱼》的实际剧本,改成“他母亲毫无同情心地拍拍他,然后整理他的……”,你知道,这里……不,领结(bow tie)就完全不同了。是的,那样会好得多。我的天哪。
问: 所以Fountain是……?
答: Fountain是这个模式。事实上,Fountain是一种格式,它可用于……例如,它可用于……你知道,其他支持Markdown的文本编辑器也支持。所以你可以用Fountain来解析来自许多不同来源的文本,不仅仅是Emacs。但是,是的,Emacs有……就像Emacs有Markdown模式一样,它也有Fountain模式。
我应该……我发现了一个我最近跟这里几个人提到的东西……叫做Poetry mode(诗歌模式)。诗歌模式……这挺酷的。因为……是的,这是一首诗。看左边,它在计算音节。这实际上非常有用,因为你要么在用手指计数,要么你就有这样的东西。所以这挺酷的。然后还有一种方法……这叫做……它不在……它有点像被弃用了,但它叫做Poetry mode。你……那个开发者说他放弃了,但他曾说计算音节比他预期的要复杂得“天文数字”般多,他花了所有时间仅仅是计算,弄清楚音节计数器,然后他说,“好吧,我需要停止开发这个了。”
但我也可以使用……Poetry mode里有一个函数,我还没有绑定到快捷键,叫做rhyme-poetry-word-at-point
,它会取光标处的单词并找到它的押韵词。
(演示押韵功能,对“made”押韵)
是的。你知道,如果能有一种方式……实际上会更有用。是Ken吗?村里有条街,或者我们……side, ice… St. Clair… St. Clair… billionaire…有一个。我觉得如果能让这个窗格保持打开,并自动押韵一行末尾的任何单词,那会很酷。我们之前讨论过……实际上是的。
这就是Poetry mode。我不会深入讲,但是的,有Poetry mode。所以我不知道,我在Emacs里做所有事情。如果有什么我想做但做不到的事情,那么……我就会去Google搜索,尝试找一个能做这个的模式,或者也许我尝试说服你们中的一些人来写它。
问: 你利用像Org Agenda mode或Org Capture这样的东西吗?
答: 是的。这里,Org Capture。我不知道那个命令……抱歉,Control-c c
。选择一个模板来捕捉。然后我可以……你知道,我有不同的……这些是不同的文件。你们此刻正在看到我大脑的内部运作。这些是不同的文件。我可以选择一个,这是一个捕捉缓冲区。这只是一个简单的,我可以……你知道,“今天我做了一个演示”。然后,你知道,我可以写文本,然后我可以按一个快捷键,Command-Control-c Control-c
,然后它就捕捉了内容,把那个文件收起来。然后如果我打开那个文件,它就有所有这些……归类为我的日记条目。基本上是的。
我最近一直遇到崩溃,我搞不清楚原因,而且是实际的Emacs崩溃,没有回溯信息(backtrace),因为我看到的只是Finder,“Emacs去哪儿了?”是的。所以我最近添加了那个。
问: 你为什么选择常规Emacs而不是Aquamacs?
答: 我开始用的是Aquamacs。是的。然后在某个时刻……在某个时刻,当我开始做大量定制,并从……或者问……你知道,从网上找到的地方复制代码,或者请人帮我做事时,每次我在Stack Exchange上提问说:“好的,我用的是Aquamacs,我试图做这个,它不工作,我该怎么做?”他们总是对我生气,说:“那你为什么一开始要用Aquamacs?你应该用GNU Emacs。”所以最终我换了。但我肯定已经……把Aquamacs有的所有功能,都实施到了GNU Emacs中,那些它原本不带的功能。比如……是的,比如Aquamacs有一些智能功能,比如如果你……你知道……剪切和粘贴文本,或者按单词删除,它不会留下多余的……它不会留下多余的空格。GNU Emacs默认会。所以我创建了一些东西来修复空格。有一个Emacs命令叫做just-one-space
。所以删除单词(kill word),然后运行just-one-space
,然后它就修复了空格。诸如此类的事情。Aquamacs有很多很棒的东西,我没有任何反对它的意见,但只是用大家都在用的那个变得更容易了。
问: 你用Org Ref做参考文献吗?
答: 不,我不。我不做那个。我记录……嗯,实际上,好的,这是个好问题。我如何记录参考文献?如果我……我有一个小……我想这是通过abbrev-mode
。我可以输入no
……哦,我可能……我可能删了它。哦,我最近……有了。好的。一个脚注。所以,我可以添加一个脚注。然后当我……是的,我不知道……然后当我导出时,它就变成了一个脚注。对吧?这就是我一直在做的,边写边加脚注。然后我有一个文献综述文章(bibliographical essay),我在里面用散文实际写出,“关于伴侣偏好(mate preferences)的部分来自某某某的论文……”你知道,我用散文写出来。因为我不是在写……你知道,一篇需要特定格式的论文。我觉得最简单的方式就是写注释,现在人们就是这么做的,写注释说明你在哪里找到了不同的东西。
问: 但在这种情况下,它不会去某个数据库查找参考文献?
答: 哦,不,完全不会。不,没错。
问: 我有两个问题。第一个,你的窗口标题是“Am I...”
答: 哦,在我做这个演示之前我可能应该改掉它。我只是发现……你知道……哦,是的,好的。这是因为我从……所以,如果你用Mac,你从哪里获取你的Emacs?我以前从一个叫做 emacsformacosx.com
的网站获取,下载那个。然后我在网上读到人们说,“你知道吗,比那个好得多的是这个,像Railwaycat Emacs,因为它有更好的字体渲染等等等等,而且它有能力……你可以滑动东西。”所以我可以滑动,从……这叫什么?帧(frames)?从一个帧滑动到另一个帧,只需滑动。看那个。而且还有……还有,你知道……哦,我还可以,我想……这叫什么?我可以捏合来……我可以捏合来缩小文本,我可以……捏合的反义词是什么?不知道。我可以做……我可以做这个来缩放。所以它有这些功能。而且文本,字体确实看起来更好,因为它有某种……你知道,RGBA图形图形……什么什么的。所以他们说,“哦,换那个吧。”然后我就换了。然后我发现,不像GNU Emacs,以前我用GNU Emacs的时候,我的文件标题……
(演示旧版GNU Emacs会在标题栏显示文件名)
我的文件document.txt
会显示在这里(指标题栏)。但这在Railwaycat Emacs上没有发生。相反,它顶部只显示“Emacs”。这没用,我为什么需要那个?而且我在不同时间打开不同的文件。所以我Google了一下,有一个东西说设置你的……文件……这叫什么?窗口标题?标题栏?只需修改这个函数……修改这个变量,我应该说,比如 setq variable whatever-it-was
为这个,这里是通配符,对所有这些……实际的文件名都有效。如果你想插入其他字符串,也可以。然后我就随便玩了一下,现在它显示的是,“嘿,哥们儿,仅供参考,这个文件叫做 document.txt”之类的,其中document.txt
只是标题。好吧,我只是自娱自乐。
问: 是的,那在你的……?我们可以看看你的……?你把它放到网上了吗?
答: 是的,我确实把它放到网上了。
七、 问答环节拾遗
(接上文)
问: 我们可以看看你的……?你把它放到网上了吗?你的Emacs配置?
答: 是的,我确实把它放到网上了。
哦,我用的另一个东西,顺便说一下,是……这叫做buffer-stack
。这……是的,这节省了这么多时间。因为……与必须使用Microsoft Word相比,“哦,我想打开这个文件”,我可以只用……我把它绑定到了Command+右箭头
,Command+左箭头
。所以这些是我所有相关的缓冲区。然后那些……你知道,编译窗口,或者……你知道,好吧,我实际上可以看到所有……是的,这些东西,或者Agenda、scratch、messages、shell命令输出、PDF输出……我设置了这些不被buffer-stack
追踪。这样当我翻页浏览时,我只看到那些对我来说有意义的。对吧?所以这很有用。
我有一个最近文件(recent files)的东西,这是…… Helm模式,最近打开的文件。所以这很有用。只是我最近的文件。
我还有……是的,我记起所有这些东西了。我绑定了Command+反斜杠
,它用一个按键打开上一个打开的文件。所以它可以……你知道,如果我启动然后……如果我用Command+F
关闭一个文件,然后我想,“哦,我实际上需要那个”,我可以……我可以再次打开它。比如《大鱼》(Big Fish),kill-buffer
关闭,或者我再打开它,一个按键。这很有用。
我有一个Projectile
开始用了,是的。在这个项目里……所有的文件,然后我可以缩小范围。对吧?所以这很有用。
然后有人问我……
问: 你把这个放到网上了吗?我的……你想看我的Emacs配置,对吧?
答: 是的,所以我确实……我确实把它放到网上了。我还有不止一个。我最初把它分成了两个文件,当我用Aquamacs的时候。所以这个是shared
,在GNU Emacs和Aquamacs之间共享。然后我还有另一个叫做gnu-emacs-startup
,只用于GNU Emacs。虽然我不再用Aquamacs了,所以我可以把它们合并起来。但后来我又开始把它们拆分了,比如我这里有cosmetics
,里面是像……你知道,不同的字体和颜色主题之类的东西。
哦,是的,另一件事是……如你所见,我有我的……我的Emacs配置……我的配置文件在Org mode里。对吧?所以这些……这些是标题。或者实际上,这里有一个更好的,因为我有标题和子标题。 评论: 这真的很有趣,就像Org mode是你…… 答: 是的。这些……为了……这太迷人了,真的很酷。
我隔离了……我做了一件事,这样我可以同时拥有一个kill ring和一个粘贴板,就像OS 10的粘贴板。所以如果我从网上复制文本,那是……我可以粘贴那个。但这与我kill(删除并存入kill ring)某个东西是不同的。所以我仍然可以复制和粘贴网上相同的文本,但如果我想粘贴它,我可以独立于kill ring进行粘贴。所以它们是分开的。所以我实际上有两个,这实际上非常方便。是的,我可能应该撤销所有这些。
主持人: 快速提醒一下时间,我们大约进行了一个小时了。
答: 我没问题。还有其他问题吗?还有很多,像一百万个。但有谁有问题想问吗?我可以分享我的……我的GitHub仓库,里面有我的配置文件,然后你们可以看看,如果你们感兴趣的话。你们可以修复和清理代码,因为我不知道我在做什么。谢谢大家。
要点回顾
一、 引言:一位非程序员作家的Emacs之旅
- 演讲者Jay Dixit是一位科学作家和记者(主要写心理学),并非程序员。
- 他将分享自己作为作家和研究者使用Emacs的原因和方式,以及Emacs如何帮助他提高效率。
- 他认为通过讲述自己接触Emacs的故事能最好地解释其吸引力。
二、 探索历程:寻找理想的写作工具
- 早期经历:
- 最早接触计算机是父亲(物理学家)的Unix终端。
- 通过一个Unix脚本收发邮件,并在终端上学会打字。
- 玩过文本冒险游戏Zork(Dungeon)和《银河系漫游指南》的游戏版。
- 第一台个人电脑是PowerBook,使用Microsoft Word写论文和做笔记。
- 习惯用大纲(outlines)方式思考和组织信息。
- 写作瓶颈:
- 在撰写一本关于无意识心理学的非虚构书籍时,发现Microsoft Word难以管理庞大复杂的信息和结构。
- 写作过程最难的部分是构思整体结构。
- 工具尝试:
- WorkFlowy: 喜欢其层级列表(大纲)功能,但作为Web应用速度较慢,且缺乏足够的键盘快捷键,不适合写长篇著作。
- Scrivener: 提供了结构(左侧)和文本(右侧)分离的视图,但操作依赖鼠标拖拽,效率低,界面 cluttered(混乱),增加了管理信息的焦虑感。
- 明确需求:
- 渴望一个能结合WorkFlowy(键盘驱动、快速编辑大纲)和Scrivener(结构/文本分离视图)优点的工具。
三、 遇见Emacs:发现与学习
- 论坛求助:
- 在
outlinersoftware.com
论坛发帖,非常具体地描述了需求:左侧窗格是键盘可编辑的层级结构(多级列表),右侧窗格是文本编辑/文字处理。
- 在
- 关键回复:
- 一位名叫JB的用户回复建议使用 Emacs Org mode,并提到可以通过
indirect buffer
,vertical split screen
,visibility cycling
和热键来实现他的需求。
- 一位名叫JB的用户回复建议使用 Emacs Org mode,并提到可以通过
- 初学挑战:
- 下载安装后,面对Emacs感到非常“可怕”和复杂。
- 作为非程序员,最初甚至不知道在哪里输入
make
,make install
等命令来安装Org mode。 - 自嘲当时完全是新手,需要从零开始。
- 坚持与成果:
- 经过一段时间的摸索和学习(包括邮件请教JB),最终成功配置出符合自己最初设想的工作环境。
- 实现了左侧大纲(可键盘编辑层级)和右侧文本编辑的实时联动视图。
四、 Emacs写作实践:核心功能与技巧
- 核心工作流:
- 使用Org mode撰写书籍大纲和正文。
- 左侧大纲视图可使用键盘快捷键轻松调整章节顺序和层级。
- 右侧文本编辑区与左侧大纲实时同步。
- Org Mode特性:
- 大纲编辑: 用星号(*)或项目符号定义层级标题,通过快捷键快速折叠/展开、移动、提升/降低层级。 (Jay使用了
org-bullets-mode
隐藏星号,用缩进和颜色表示层级)。 - 文本注释: 像写代码一样,使用
#
(octothorpe)给自己添加写作注释(如“phrase this better”)。 - 内容管理: 使用自创的
palimpsest mode
,一键将暂时不需要的文本块发送到文件末尾的特定标题(如Extra
)下,而非直接删除。 - 导出功能:
- 将Org mode文件导出为HTML,用于制作演示文稿(使用了
org-reval
或类似工具)。 - 通过LaTeX导出为高质量的PDF文档(甚至花钱请人定制了LaTeX模板)。
- 导出为其他格式(如需要提交Word文档,但可能需要手动处理部分格式)。
- 将Org mode文件导出为HTML,用于制作演示文稿(使用了
- 大纲编辑: 用星号(*)或项目符号定义层级标题,通过快捷键快速折叠/展开、移动、提升/降低层级。 (Jay使用了
- Emacs通用优势:
- 强大的搜索与替换: 支持正则表达式,可跨多个文件操作,界面比Word更高效。
- 纯文本与无干扰: 可以专注于内容,避免Word等富文本编辑器的格式干扰和界面混乱。
- 高度可定制: 可以根据个人需求定制几乎所有功能,尤其是键盘绑定,极大提升效率。
- 速度与效率: 习惯Emacs后,使用Word会感觉极其缓慢和低效。
五、 拓展功能与生态:Emacs 不仅仅是编辑器
- 邮件客户端: 使用
notmuch
等模式在Emacs中收发和管理邮件。 - 缩写模式 (abbrev-mode):
- 定义大量缩写(如
bc
->because
,t
->the
),输入时自动扩展,极大减少击键次数,提高输入速度(展示了个人包含数百缩写的词库和使用频率)。
- 定义大量缩写(如
- 集成搜索:
- 可在Emacs内部调用Google搜索并将结果显示在Emacs缓冲区中。
- 使用
Helm swoop
在当前或打开的缓冲区中交互式搜索。 - 使用
Helm AG
(The Silver Searcher) 或ripgrep
在项目或指定目录中进行高速全局搜索。
- 特定文本格式支持:
- Fountain Mode: 自动识别并格式化纯文本为标准电影剧本格式。
- Poetry Mode: 辅助诗歌创作,可计算音节数、查找押韵词。
- 信息捕捉 (Org Capture):
- 设置模板,通过快捷键快速捕捉想法、笔记、待办事项等到指定的Org文件中。
- 版本控制与备份:
- 使用Git进行写作项目的版本管理(当作快照系统),方便追踪修改和回溯。
- 结合Dropbox和外部硬盘进行多重备份。
- 窗口与文件管理:
- 多窗口/缓冲区: 分屏、间接缓冲区 (
indirect buffer
)、区域编辑 (narrow-to-subtree
)。 - 高效切换:
Buffer stack
(只在相关文件间切换),helm-recentf
(最近文件列表),一键打开上一个关闭的文件。 - 项目管理: 使用
Projectile
管理项目内的文件和操作。
- 多窗口/缓冲区: 分屏、间接缓冲区 (
- 配置管理:
- 使用Org mode来组织和编写自己的Emacs配置文件(
.emacs.d
),使其更易读和管理。 - 配置被分割成多个文件(如
shared
,gnu-emacs-startup
,cosmetics
)。
- 使用Org mode来组织和编写自己的Emacs配置文件(
六、 反思与比较:Emacs适合谁?
- 与其他作家的比较:
- 提到George R.R. Martin使用WordStar,Neal Stephenson使用Emacs(并引用他对Emacs编辑能力的赞扬)。
- 对Emacs的看法:
- Emacs学习曲线陡峭,需要大量时间和精力投入(“学Emacs需要10年”)。
- 自己的配置是大量定制、复制代码片段、甚至“诱骗”他人帮忙写代码的结果。
- 承认花费了大量时间在配置和调试上,这些时间本可用于写作。
- 推荐建议:
- 不会轻易向普通作家推荐Emacs,除非他们对现有工具有强烈不满且愿意投入学习。
- 对于希望改善工作流但不想深入技术的作家,可能会推荐
nvALT
(一个简单的基于Markdown的笔记/写作应用)。
- 协作问题:
- 与他人协作通常通过导出为HTML或纯文本邮件进行,而非直接共享Org源文件。
- 个人选择:
- 尽管复杂,Emacs提供了他所需的强大功能、灵活性和效率,解决了最初的问题。
- 持续探索和改进自己的Emacs工作流,享受自动化带来的便利。
七、 问答环节拾遗
- 为何从Aquamacs换到GNU Emacs: 主要因为社区支持和提问时遇到的阻力,但需要自行配置以实现Aquamacs的一些便利功能(如智能空格处理)。
- 参考文献管理: 目前主要通过Org mode的脚注语法手动添加,并在文末撰写文献综述散文,未使用专门的文献管理工具(如BibTeX)。
- 网页引用: 开发了函数/快捷键,可以自动抓取当前浏览器页面的URL和标题,插入为带链接的Org格式引用。
- 自定义窗口标题: 通过修改Emacs变量来自定义窗口标题栏的显示内容。