Emacs 入门笔记

· · 科技·工程

前言 · 一点吐槽

为什么诸位都如此热衷于 vscode 啊?

我随便一翻都能看到 inf 篇介绍 vscode 配置的文章,真是够了。

不如来玩点神秘的:Emacs。

什么是 Emacs?

Emacs 是一款由 GNU 开源软件基金会完全自主研发的开源文本编辑器。在这款编辑器中,你将在一个叫做“buffer”的环境中冒险,与 elisp 邂逅,并探明“Emacs pinky”的真相……

不开玩笑了。Emacs 是知名的老牌文本编辑器,与 vi/vim 齐名,长期处于编辑器鄙视链的顶端。它的主要优势是无与伦比的可定制性——它是 Lisp Machine 思想的继承者,整个编辑器内核连同各种功能都由一种叫做 elisp 的语言写成,并且自带一个 elisp 解释器。这意味着用户可以像修改游戏 Mod 一样,自由地修改编辑器的任何代码,或者增加自己的函数,把它打造成任何你想要的样子。

它的可定制性是图灵完备的:理论上,你可以用它来做任何事情,包括但不限于浏览网页,管理日程,与朋友吹水,又或者……原神,启动!

如何获取?

最简单的方法是访问 GNU Emacs 项目官网或者其 GitHub 仓库然后下载。你也可以用你的包管理器,比如 Windows 的 wingetscoop,macOS 的 brew,或者 Linux 的 aptpacman 等等。在包管理器里搜 emacs 通常就能找到。

装好后先别急着打开,因为这时的 Emacs 没有任何配置,外观简陋,功能匮乏,保证劝退。我们需要给它注入灵魂。

如何配置?(新手的捷径)

好问题。你肯定听说过 Emacs 的配置极其困难,但作为一个刚入门的新手(就像我),想快速上手其实非常简单。

要义在于:不要自己从头配! 靠自己一行行攒配置所消耗的时间精力是巨大的,很可能在你配出一个好用的编辑器之前,就已经失去兴趣了。

我们可以直接站在巨人的肩膀上,搜寻一些别人做好的 Emacs 发行版。比如经典的 Doom EmacsSpacemacsCentaur Emacs 或者 Prelude

其中 Doom Emacs 和 Spacemacs 默认开启 evil-mode(Vim 模式),使用体验类似 Vim。我不会用 Vim,所以自然放弃了它们。Centaur Emacs 和 Prelude 则坚持原生快捷键体验,而 Prelude 更加轻量级,并且为用户保留了充足的自定义空间,所以我最终选择了它。

对于 Prelude,你只需要一条命令就能完成安装。打开你的终端(Windows 建议使用 PowerShell):

git clone https://github.com/bbatsov/prelude.git $env:appdata/.emacs.d/

这条命令会把 Prelude 的所有配置下载到 Emacs 的默认配置目录里。

$env:appdata 是一个环境变量,代表你的 Windows 放置 APP 数据的目录。

Prelude 接管了主配置文件 init.el,我们最好不要动它。如果你想自己加点东西,Prelude 已经为我们预留了 ~/.emacs.d/personal/ 目录,你自己的配置可以写在 personal/custom.el 文件里。

等等,~/.emacs.d 是什么? 这里的波浪线 ~ 是命令行的快捷方式,代表你的用户主目录(Home Directory)。

  • 在 Windows 上,通常是 C:\Users\<你的用户名>
  • 在 Linux 或 macOS 上,是 /home/<你的用户名>。 Emacs 会自动在这个目录下的 .emacs.d 子目录里寻找配置文件。

现在,启动 Emacs(Windows 用户建议用 runemacs.exe,可以避免一个黑色的控制台窗口)。第一次启动时,Emacs 会自动运行 Prelude 的配置脚本,下载并编译一大堆插件。这个过程可能会持续几分钟,期间 Emacs 可能会“未响应”,别慌,这是正常现象,耐心等待即可。

跑完之后,你的 Emacs 就配置好了。尽情玩耍吧。

如何使用?

就把它当做一个普通的文本编辑器用。和 VS Code 或者 Sublime 没有本质区别。

当然,还是有些奇特的地方。比如快捷键。但别怕,去问你的 ChatGPT/Gemini:“Emacs 最基本、最常用的快捷键有哪些?”花几分钟就能学会核心操作。都 2025 年了,这种小事不应该成为门槛。

至于外观,Prelude 默认的主题我就很喜欢,有点像 CLion,至少比上古神器 Dev-C++ 好看多了。Prelude 安装的插件也提供了很多强大的功能,你在使用中会慢慢发现它们的妙用。

我的个人配置

我基于 Prelude,只改了 O(1) 个小地方:

  1. 设置了默认编码为 UTF-8,避免中文乱码。
  2. 设置了中文字体,不然中文没法看。
  3. 关掉了 whitespace-mode 对长行的紫色高亮提示(太丑了)。
  4. 因为我用 Emacs 写 Scheme 和 Racket,所以启用了对应的模式,并做了一些微调。

我的配置文件放在了 GitHub 上:litjohn/my-emacs-settings,欢迎自取。

注意: 我出于个人喜好用了 Jetbrains Mono 作为编程字体。如果你电脑上没有安装,Emacs 可能会回退到某个丑陋的默认字体。你可以在我的 personal/custom.el 文件里找到设置字体的代码,把它改成你喜欢的,比如 ConsolasCascadia Code 或者 Fira Code

你问我怎么没配置 C++ 开发环境?

不是,哥们儿,写 C++ 这种主流语言为什么不用 JetBrains 的产品?CLion 现在对个人都免费了!

我用 Emacs,纯粹是因为它写 Scheme 和 Racket 真的很顺手。工具嘛,顺手好用就行。