WSL2 Ubuntu环境下安装doomemacs笔记
基本目标是在Windows 11上安装doomemacs,同时令其有较好的中文支持以便于日常写作。
在Windows上有多种方法可以安装doomemacs:
| 安装方式 | 优点 | 缺点 |
|---|---|---|
| 直接在Windows上安装 | 最方便,emacs与Windows集成度最高 | emacs在Windows上性能较差;doomemacs的doom脚本对Windows的支持很差 |
| 使用wsl2 | 比较方便地在Windows上使用Linux,且文件互通 | wsl2的一些方面还不完善,需要繁琐的配置;中文输入是个问题 |
| 虚拟机 | 最省心的emacs环境 | 文件互通麻烦,使用体验存疑 |
考虑到与Windows的集成、Emacs的性能与后续管理更新的便捷,最后选择了在wsl2上的Ubuntu 22安装doomemacs。
参阅doomemacs的安装教程与安装过程中的提示信息就可以解决一些问题。基本使用、插件管理等方面可以参考DT的视频。
下面是遇到的一些场外问题。
更新Ubuntu到最新的LTS版本
最新的Ubuntu LTS(本文写作时是24)软件仓库中的软件和库版本更高,可以解决不少问题。
安装较新版本的Emacs
参考上一条,最新的Ubuntu LTS的软件仓库提供了Emacs 29,以下内容可以忽略了
Ubuntu官方源不提供较新版本(28.x, 29.x)的Emacs,需要另寻他路。
最简单的方法是用snap:
1 | snap install emacs --classic |
但snap需要运行snapd服务,这需要systemd或其替代。WSL只在近期才引入了systemd,可能需要手动打开。
本文成文时,wsl2中启用systemd的话会在后续使用GUI界面时产生问题。所以最后选择了手工构建emacs安装,这样的好处是可以加上--with-native-compilation提高性能。
可以参考这个脚本,基本解决了构建过程中我遇到的问题。考虑到网络问题,也可以选择不用git,而是去emacs官网直接下载源码。
更详细的教程可以参考emacs wiki的Gcc Emacs这篇文章及其相关的文档。
git的证书问题
具体原因不明,总之在git clone的时候会出现server certificate verification failed. CAfile: none CRLfile: none的错误。包括在doom install的时候。
解决方法是关掉验证:
设置环境变量GIT_SSL_NO_VERIFY=truegit config http.sslVerify "false"
应该是因为doom没有使用系统的git配置,可以通过设置环境变量令其使用指定git配置
Doom intentionally ignores system git config. To bypass this, set
DOOMGITCONFIGto the location of the git config file you want it to use.DOOMGITCONFIG=~/.config/git/config doom sync
GUI卡顿问题
使用GUI运行时,发现有十分明显的卡顿情况。缓解方法可以参考Github上的这个Issue:
使用,但行号还是比较重要的,这条pass。(setq display-line-numbers-type nil)移除行号- 将
init.el中的modeline换为轻量的(modeline +light) - 使用更适合emacs的字体。doomemacs官方推荐Fira Code。
config.el中提供了字体配置模板。记得先安装字体。
中文显示问题
wsl默认没有配置中文语言环境,因此GUI上的中文会显示乱码。需要先配置一下中文环境并安装中文字体。
字体的安装可以直接复制Windows的字体:
1 | sudo cp /mnt/c/path/to/VictorMono.ttf /usr/local/share/fonts/ |
或者直接建个软连接之类的:
1 | sudo mkdir /usr/share/fonts/win11 # to differentiate self-built font links from system font files |
剪切板互通问题
WSL的emacs GUI跟Windows剪切板不互通,这点可以安装emacs的xclip插件解决。原理应该是在WSL中调用Windows的powershell获取剪切板内容。
注意如果开启systemd的话,可能会导致WSL无法调用Windows的可执行程序。
中文输入问题
wsl的emacs有几种方法可以输入中文:
- 在终端上打开时,可以直接通过终端输入。
- 使用emacs的中文输入法插件。doomemacs提供了
chinese模块。 - 在wsl上安装输入法。
由于我个人想用GUI,因此需要在2和3之间挑一个。考虑到3很麻烦,而且wsl的支撑程度与美观上都存疑,还是用2吧。
doomemacs官方提供的chinese模块没有维护且安装较麻烦,因此选择安装emacs-rime配合posframe实现中文输入。可以直接参考emacs-rime的文档
基本配置
需要注意的是,rime需要能打开功能选单来实现简繁切换、输入法切换等实用功能。但功能选单默认的快捷键C-` 已经被doomemacs的popup模块占用了,需要换个快捷键。例如:
在rime的配置文件default.custom.yaml中加入:
1 | patch: |
在doom的config.el中加入:
1 | ;; 在默认值的基础上加入了C-' |
然后重新部署rime并重新启动emacs,即可在输入法输入时使用C-'打开功能选单了。
安装更好的输入法
本节默认了在Windows和Emacs中同时使用rime,因此更多地考虑了两者如何互通。如果只在Emacs中使用rime的话,可以忽略掉Windows/小狼毫相关的内容。
rime默认提供的输入法较为简陋,可以安装配置和词库更好,且开箱即用的雾凇或其衍生的白霜。
rime的配置分为共享文件夹和用户文件夹,大致就是全局配置和本地配置。考虑到wsl与Windows在文件系统上的集成,可以将上述输入法放在Windows的全局配置路径下,然后基于此在wsl/Emacs和Windows上分别再定制配置。
安装
Windows上,小狼毫的共享文件夹是小狼毫安装目录\data。上述两个输入法任选其一将其放进去即可。
wsl上的配置
首先确保emacs-rime的依赖librime-dev版本足够高(1.8.5以上),且安装了lua插件librime-plugin-lua。这是因为雾凇需要lua脚本实现功能。
然后,参考官方文档,将emacs-rime使用的共享目录设置为Windows小狼毫的共享文件夹。当然,也可以选择在默认的共享文件夹再安装一份输入法。
最后,在用户文件夹添加自定义的配置,应参考官方文档。例如,可以在default.custom.yaml中添加:
1 | patch: |
词库同步
参考官方文档的这一节,可以让emacs-rime和小狼毫使用同一同步路径,以方便地在两者之间同步词库。