UP | HOME

Ping's Tech Notes

Doom Emacs on Ubuntu Linux 尝鲜

Ping Zhou, 2022-05-21

Doom Emacs简介

Doom Emacs 是一个 Emacs 的配置框架,相比原厂的 Emacs 配置,Doom Emacs 提供了更方便完善的默认设置,预装了常用的包,并且提供了一个很容易自定义的框架。同时,Doom Emacs 启动速度也很快。最近在 Ubuntu 上试用了一下,感觉不错,正在考虑将我原有的配置移到 Doom Emacs 上去。

2022-05-21_19-14-11_screenshot.png

注意,Doom Emacs 不是 Emacs 发行版,只是一组 Emacs 配置,你运行 Doom Emacs 时,运行的还是系统上安装的 Emacs。Doom Emacs 需要 Emacs 27.1 以上,如果你的 Emacs 版本太低,需要先升级才能使用。

在 Ubuntu 上安装 Doom Emacs

首先你需要 Emacs 27.1 以上,个人推荐最新的 28.1 ,并带上 native-compilation 。

./configure --prefix=$HOME/local \
            --with-native-compilation \
            --with-x --with-json \
            --with-jpeg --with-tiff --with-png
make -j4
make install

根据Doom Emacs的建议,加上 --with-json 可以提高运行速度。安装完成后确保 ~/.local/bin 在PATH里。

此外,还有一些依赖包:

  • Git 2.23+
  • ripgrep 11.0+
  • GNU find
  • fd (可选)

最后那个 fd 工具,注意不要跟 fdclone 搞混了,如果你安装了 fdclone 包,会出来一个界面是日文的 fd 程序 :-D 正确的安装步骤是这样:

sudo apt install fd-find
ln -s $(which fdfind) ~/.local/bin/fd

然后根据Doom Emacs官网的步骤:

git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.emacs.d

实际操作的时候,我是把原有的 Emacs 配置目录 .emacs.d 改名,然后创建一个符号连接到 Doom Emacs 的目录:

git clone --depth 1 https://github.com/doomemacs/doomemacs ~/git/doomemacs
# 将原有的.emacs.d目录重命名,然后做一个符号连接到Doom Emacs代码库
mv ~/.emacs.d ~/.emacs.d.orig
ln -s ~/git/doomemacs ~/.emacs.d

这样可以方便的切换回原有的Emacs配置。

接下来就可以运行安装了:

~/.emacs.d/bin/doom install

安装过程可能会持续一段时间,特别是28.1的话,需要编译elisp到原生代码,所以需要一些耐心。

Doom Emacs配置初探

Doom Emacs 安装完成后,会生成一个 .doom.d 目录,里面存放 Doom Emacs 的本地配置。

原先的 .emacs.d 目录,现在指向的是刚才从git上拉下来的 Doom Emacs 代码库,这个目录一般是不动的,所有的自定义配置,都应该在 .doom.d 目录下进行。

.doom.d 目录下有三个主要的文件:

  • init.el 主配置文件,选择要激活哪些预装的包。
  • config.el 自定义配置,可以在这里加上自定义的配置,加载需要的包等等。
  • packages.el 包管理,把想要安装的包加在这里。

例如我在 init.el 里激活了中文输入,go,C/C++, Common Lisp等包:

(doom! :input
       ;;bidi              ; (tfel ot) thgir etirw uoy gnipleh
       chinese
       ;;japanese
       ;;layout            ; auie,ctsrnm is the superior home row
       ;; ......
       :lang
       ;;agda              ; types of types of types of types...
       ;;beancount         ; mind the GAAP
       (cc +lsp)         ; C > C++ == 1
       ;;clojure           ; java with a lisp
       common-lisp       ; if you've seen one lisp, you've seen them all
       ;;coq               ; proofs-as-programs
       ;;crystal           ; ruby at the speed of c
       ;;csharp            ; unity, .NET, and mono shenanigans
       data              ; config/data formats
       ;;(dart +flutter)   ; paint ui and not much else
       ;;dhall
       ;;elixir            ; erlang done right
       ;;elm               ; care for a cup of TEA?
       emacs-lisp        ; drown in parentheses
       ;;erlang            ; an elegant language for a more civilized age
       ;;ess               ; emacs speaks statistics
       ;;factor
       ;;faust             ; dsp, but you get to keep your soul
       ;;fortran           ; in FORTRAN, GOD is REAL (unless declared INTEGER)
       ;;fsharp            ; ML stands for Microsoft's Language
       ;;fstar             ; (dependent) types and (monadic) effects and Z3
       ;;gdscript          ; the language you waited for
       (go +lsp)         ; the hipster dialect
       ;; ......
       )

修改完配置后,运行一下 sync :

~/.emacs.d/bin/doom sync

Doom Emacs 会自动同步配置并安装所需的包,然后重新启动 Doom Emacs 即可。

如果出现问题,可以用 doom doctor 查看:

~/.emacs.d/bin/doom doctor

一般缺少什么包或者工具,用 doom doctor 都能告诉你。

下一步计划:将我原有的Emacs配置(以org文件管理)移植到Doom Emacs。