我与Emacs
如果你翻看我的博客,你会找到一小部分有关Emacs的文章。在138篇文章,16万字中,一共出现了125次Emacs,一半以上都是尝试入门Emacs记录的。直到去年的11月,我正式入门了Emacs。
我与Vi
关于Emacs,这就要从Vi说起了。
也许是因为看了TheCW的Vim综合征,或者是看了Mars的这个视频,总之有一个视频对我有一些影响,让我开始折腾代码编辑器。
在2024年十二月或更早一些,一个链表都写不利索,甚至不知道什么是链表,甚至没写过任何一行数据结构的菜鸟开始配置自己的Vim。当时我用的是Windows10,你绝对想象不到在Windows上用Vim是一种什么样的体验,首先从安装开始就非常折磨。你需要去Vim那又老旧,引导又差的官网上找到适配你CPU的文件,运行那个文件进行安装,安装过程中好像会有一些选项,最后配置环境变量。
不仅安装麻烦,配置也很折磨,Windows下的Vim配置文件并不像GNU/Linux下那样好找,它在:
USERPROFILE%\AppData\Roaming\vim\vim74
是的,就是这么个位置。你要进五层目录,然后终端的提示符中就有了冗长的路径,这也是我使用GNU/Linux的原因之一,我受不了Windows的丑。
一开始我想的是一下午搞定,让它和IDEA一样能流畅地写代码,写我的Java代码。但显然我太天真了,当时我根本不懂那些配置有什么作用,只是去网上抄代码,出错了也不会调试,就半途而废了,但这次还是有收获的,我学会了使用:wq来退出Vim。
之后不知道又经过了几次尝试,也用过Neovim和Lazyvim。在Lazyvim上花费的时间是最多的,因为它非常适合根本不懂配置,也不愿意折腾太多配置的人,有一段时间我使用Arch Linux,貌似也使用Lazyvim。谈起Arch Linux,也是一次激进的尝试。这里可以和代码编辑器放到一起说,我都是被花里胡哨的配置所吸引的,如果你是出于兴趣在用GNU/Linux,你一定折腾过桌面美化,那种半透明终端、二次元壁纸、Dock栏、Mac主题、窗口果冻特效破碎特效的美化。我折腾Neovim和KDE美化几乎是同时进行的。在那个时候我基本不会写代码,也不想写代码,只是觉得「啊,我的桌面真好看!」「啊!我的Neovim真帅!」等等。
有从Vim迁移到Neovim的,但你一定没见到过从Neovim迁回Vim的——我就是那个人。
说实话,我不喜欢Lua。一门编程语言首先要让代码看起来顺眼。比如纯C或者Go,但Lua实在背离我的审美点,并且它的模块加载机制很奇怪,至少我当时没弄懂,我也有很长时间没碰过Lua了。我甚至觉得Lua比Vimscript还难写,所以就用回Vim了。如果大学开设「折腾代码编辑器而不写一行有用的代码」这门课程,我毫无疑问可以胜任教授,除了Vi系,我还折腾过VSCode。
我也许是想,既然这么多编辑器都玩过了,为什么不试试Emacs呢?我大概抱着这样天真的想法,就开始尝试Emacs。
你可以发现一件非常好笑的事,我的博客里有 《初折腾Emacs记录》、《我还是放不下Emacs!》、《Emacs,我又回来了!》这样的黑历史,我多次尝试Emacs,这说明Emacs真的很困难。我当时既不喜欢Lisp,又几乎对Emacs一无所知。在使用Doom Emacs后,才算是把我留住。
我为什么选择Emacs
你也许会觉得我要说「可定制性」「神的编辑器」这样的话,但如果问当时的自己:「你为什么要选择Emacs?」就像上文所述,只有四个字:脑子一热。
我脑子一热做过很多事,比如学编程、写博客、弹贝斯、写周刊……总是有一个念头:「诶,感觉不错啊!」然后手就自己动起来开始做了,除了写作业。
如果仔细分析,Emacs确实有很多迷人的点,但最吸引我的是全键盘工作流。我从新建这篇文章到说了这么多口水话,一次鼠标都没有动过,它甚至离我很远。当然,我要承认的是,适度用用鼠标是有益身体健康的。至少不会让你的手指和胳膊特别疲劳。
全键盘哲学当然要说说Vi(Vim/Neovim),用Vi不只是用编辑器,而是用一种围绕Vi快捷键的生态。初次使用Vi,你可能觉得HJKL移动光标很反人类,但这能让你手指几乎不移动地灵活操作,在适应后就离不开了。我有装了Vi键位的浏览器,也用过nnn,yazi等支持Vi快捷键的终端文件管理器,你几乎可以在GNU/Linux的任何地方找到HJKL的哲学,支持方向键的地方基本就支持HJKL,比如Archinstall脚本。我甚至尝试了一段时间用HJKL玩Minecraft。
但Vi系编辑器可以做的事,终究只是编辑代码。Emacs的可定制性让它几乎可以完成所有事。
可定制性是Emacs最大的特点,你几乎可以改动任何一个让你不爽的细节,除了修改源代码那种硬核的方式以外,可以通过Emacs Lisp来配置,这可能也是拦住很多人使用Emacs的一点。Lisp这门语言在没有接触过的人看来,简直是其丑无比、臭不可闻,因为它完全是由括号组成的,但当你熟悉了之后,这也是Lisp最讨人喜欢的地方:一切都是列表,整个宇宙都是列表,代码即数据。
Emacs鼓励用户进行定制,提供了很多方便的函数,比如describe-key这样查看某个按键组合详细信息的函数,我在前阵子也自己从零开始配置了Emacs,写了很多ELisp代码,你可以在这里查看我的Emacs配置。
我也用Emacs实现了自己的数字花园,这个项目只有Emacs Lisp和Shell脚本组成,没有任何外部依赖,全靠Emacs强大的Org-mode。它还被收录于2026-02-09期的Emacs news。
这也是Emacs教徒们经常拿来传教的一句话:只要你想,没有Emacs做不到的。你甚至可以在Emacs里写代码!
百年Emacs
除了可定制性外,Emacs悠久的历史也很吸引我。这个天杀的操作系统竟然1984年就诞生了,比我爸岁数还大,由于它极高的可定制性,社区依然保持活跃,在Melpa的仓库中,每周都有新的PR提交新的Package。同时Emacs也有非常多的分支变种,比如Linus在用的Uemacs(MicroEMACS)。让我没想到的是,这位最早提交在16年前,但是三周前Linus还发布了一个补丁的老爷子,编译安装后竟然能无痛支持中文字符,或许是我终端配置过的原因吧,我相信Linus一个美国人、芬兰人,不会在终端碰见中文字符的。
扯远了……说回历史这个话题。Gen Z的特点之一就是怀念早期互联网,不知道2011年出生还能不能算Gen Z,但我真的莫名怀念早期互联网。但我到底怀念的是什么东西呢?可以简单用一些关键词来概括:C, Unix, Linux, Newsgroup(Usenet), Email ,邮件列表。或者Windows的IE浏览器、PHP大行其道的年代,我应该赶上了这个尾巴,记得小时候还有当年我爸学PHP买的书,当然早丢了,他可能也只看了目录。
Emacs自然在Usenet流行的时候广为人知,在《UNIX痛恨者手册》这本书里就多次提到,当时大家都用Gnus看邮件、订阅新闻组和邮件列表。由于年代太过久远,中文互联网能找到的资料太少,我就在看了上古教程和Gnu.org的手册后,拼凑出一篇教程,这可能是中文互联网最新的有关Gnus的信息。大家可能现在都用mu4e,但那个东西的界面我实在不喜欢,我更喜欢Gnus开屏那头丑到爆炸的牛。
少即是多的使用哲学
虽然Emacs可以做几乎任何事,但我现在没有像一些Emacs用户,或者说玩家一样,给Emacs装一堆包。虽然Emacs有Emac OS的称号,但它就是那种什么都能干,但又什么都干不好的典型。就拿浏览器来说,或许是因为我用Firefox而不是Chrome,不能导入Cookie,这就让我很少使用Eaf的浏览器。性能问题绝对是Emacs GUI跨不过去的坎,而且Eaf的浏览器好像还是用Python实现的,非常有创意,非常有技术,但性能肯定比不上专业的浏览器。最近我也把Eaf整个插件都从我的配置文件中移除了。
我使用Emacs的需求极其简单,无非就是写Markdown和org、写C代码、写一点前端,甚至不是Vue或者什么其他框架,就是纯原生的前端三件套,我做的那点东西也不太需要LSP,但有一个总归是舒服的。还有收发邮件什么的。
所以核心包只有LSP,顶多加一个markdown的优化插件,这就足够了,其他的就是ivy等优化体验的插件,虽然我喜欢考古,但在2026年没必要过古人的生活。我近乎偏执的数字洁癖,让我恨不得重新编译Emacs,关掉我不需要的选项才好。
但扯了那么多,最终还是要写代码的。最好的编辑器应该不挡你写代码,甚至应该忘掉编辑器这个事,眼睛里只有代码,所以我希望装更少的包,让Emacs干自己该干的事,干好该干的事,让它更稳定,不至于在写代码的时候因为某个包的错误而崩溃。就像我某篇文章的副标题说的:为不折腾而折腾,才是折腾的终极目标。
评论 与 Webmentions
若想回复本文,请在你的博客或社媒发布含有本文链接的帖子,然后在下方表单提交链接。
也可以发送邮件评论。
关于 Webmention 的更多信息 以及 为什么要这么做?