Skip to content

使用 Doom Emacs 工作

· 13 min

Table of Contents#

原文: Doom Emacs Workflows 发布于 2019 年 2 月 15日,部分功能可能已发生变化。

我最近放弃了 Spacemacs, 开始使用 Doom Emacs. 目前为止,Doom Emacs 的文档仍十分简陋,所以我用 Doom Emacs 写了这篇个人笔记来介绍我的工作流(包含一些我认为比较重要但是缺少文档的功能)。

如果你有下面的情况,Doom 也许就很适合你:

这篇文章并不打算介绍 Emacs 的运行方式和基础的 Vim 按键绑定,而是把焦点放在我认为出类拔萃的地方

安装#

一定要使用 develop 分支,不是 master ! 使用 develop 分支需要

git clone https://github.com/hlissner/doom-emacs ~/.emacs.d
cd ~/.emacs.d
git checkout develop

然后运行 bin/doom quickstart 即可完成安装。之后您可以运行 bin/doom help 查看可用命令。

项目与工作空间 (Projects and Workspaces)#

我发现使用项目与工作空间来管理工作十分有用。我从中得到了两点好处:从当前项目中寻找东西更快,还可以快速方便的通过保存和恢复 window 和 buffer 配置来回到工作。在 Doom 中,这些功能由 projectilepersp-mode 实现。

基本工作流程如下:

有三个命令非常有用:

常见任务 (Common Tasks)#

我经常使用的有:

我偶尔使用的有:

寻找文本 (Finding Text)#

如果你知道有某个文本存在,却不知道它的位置,有两种方式可以找到它:

在文本间移动 (Moving To Text)#

当您在屏幕上看到某个特定文字时,有很多方式可让您快速的将光标移动到那里:

当我想跳转到的位置和现在的位置比较近时,我会使用 evil-snipe (sS)。如果位置较远或在另一个窗口,我会使用 Avy (g s SPC)。它们都能用来选择文本,假如我们有这样的一串文本:

Just some example text

当光标位于 J 时,如果我们想选中 Just some example 。我们可以用 v3e ,但如果这样我们就需要去查单词的数量(还要记住 ew 的区别),因此,我们可以用 vsles 表示使用 evil-snipe , le 则是我们找的两个字母。我们也可以用 vgs SPC le 来使用 Avy (然后我们需要把光标向右移动一个字母)。

使用 evil-snipe 有点复杂。它把选择命令绑定到了 s 键上,但是其他一些指令(例如 yank, 或者说 y) 被 evil-surround 绑定到了 s 上。在这种情况下, evil-snipe 被绑定到了 z 键( Z 来向后搜索)。如果我们不想在选中的文字中包含某个特定文本,我们可以使用 x ( X 键向后搜索 )

扩大和缩小范围 (Narrowing and Widening Regions)#

译者注:该部分在新版 Doom emacs 中有较大变化,故该部分存在少许调整与原文不同,如需查看旧版本操作请查看原文。

在 Emacs 中有一个叫 Narrowing 的功能,对于将 buffer 限制到一个选择的文本中十分有用,但它由于经常给初学者造成困扰,默认情况下被禁用,在初次使用时可以选择是否启用。它特别适合与多个光标(见下)同时使用。您可以用 C-x n n 来将范围缩小到当前选择的区域,使用 C-x n w 执行相反操作(即扩大范围)。用 C-x n d 来缩小范围到当前的函数也十分有用。

多光标 (Multiple Cursors)#

多光标允许您同时编辑多个地方。Doom 提供了两种多光标的实现方式,它们分别是 evil-multieditevil-mc。我各人感觉 evil-multiedit 更容易使用,但是功能比较局限。

有两种方式可以开始使用 evil-multiedit :

当您选择了一些文本区域后,您可以使用 C-n (下一个) 和 C-p (上一个)。按下选中的文本上按回车键,该文本区域会被取消选中。使用这些按键,您可以随意地选中文本。

当您完成了选择后,对一个区域的修改将会影响所有的区域,大多数的 evil 命令都能够与 evil-multiedit 配合使用。

您也可以使用平时的取消按键( ESCC-[ )来退出 evil-multiedit 模式。

evil-mc 是另外一个多光标实现,它更加的灵活,但也更加难以使用。使用 evil-mc 创建多个光标有以下几种选择:

这些创建光标会重复您在真正的光标上输入的命令。您可以用 gzt 来临时关闭多光标,从光标位置继续可以再次按相同的按键 gzt

大多数的命令都能与 evil-mc 配合使用,但是少数我使用的功能不能用:

如果光标之间不同步,使用撤消一些命令通常可以解决问题。

当您完成了编辑操作后,按下 gzu 来移除所有光标

撤销与重做 (Undoing and Redoing)#

译者注:原文在这里标注了 TODO

TODO

u 键撤销。 undo-tree 系统比较复杂,但是您会慢慢习惯它。 C-rM-_ 执行重做操作, C-x u 显示撤销树(undo tree)

在编译输出间导航 (Navigating Compliation Output)#

TODO

按下 SPC p cM-b 来进行编译。 ]e[e 查看下一个或上一个 flycheck (一种拼写检查) 错误。 SPC c x 来分别列出所有错误。

杂项#

了解更多 Doom#

我对 Doom 的了解大多数都是通过阅读默认按键绑定, 查看我不认识的命令获得的。在 scratch buffer 中实验每个命令的含义很容易。