# 前言
我个人主要使用的操作系统是 Windows
,所以我希望在这个环境下配置好 Emacs
,这里就有两个选择,一个是原生的 Windows
下的 Emacs
应用程序;另一种选择是 Linux
子系统下安装 Emacs
,因为现在 Linux
子系统也支持图形界面应用了,所以直接安装使用也非常方便。但是在实际配置的过程中间遇到了许多的问题,只能说各有优缺点,这里我最终还是选择了使用 Windows
下的原生 Emacs
程序。
# Linux
子系统
子系统下无论是安装 Emacs
还是设置其他配置都非常方便,基本和原生的 Linux
系统没有太大差别。但是一个比较大的问题就是对中文的支持并不好。在期间试过 cnfonts
插件[1],但是中文仍然显示乱码。
一开始我尝试通过在终端中而不是 GUI
界面使用 Emacs
,发现中文字体已经显示正常了。 Emacs
通过 emacs -nw
指令运行,可以进入非 GUI
的界面。本来到这里应该就能够结束了,但是后来发现部分快捷键在终端模式下失效,搜索一番后发现,原来是终端无法识别部分按键的模式,具体原因可以查看这个回答[2]。
如此一来,只能尝试解决 GUI
界面的显示问题。后来经过搜索,发现是 Linux
子系统中无法直接找到 Windows
系统中的字体。 Linux
子系统中的字体可以通过 fc-list
指令查看,我发现其中并没有列举出中文相关字体,这也难怪中文显示会乱码了。
在我的系统中,字体文件存储在 /usr/share/fonts
下,为了导入 Windows
下的字体,我使用下面的指令建立了一个软链接指向 Windows
系统下存放字体文件的文件夹:
cd /usr/share/fonts | |
ln -s /mnt/c/Windows/Fonts ./windows |
之后再使用 fc-cache
命令让系统识别新加入的字体,现在使用 fc-list
再查看字体就能够发现中文字体了。在 GUI
界面中使用 cnfonts
也能正常配置字体了。
但是此时其他问题又困扰了我,在 GUI
界面中,无法调用 Windows
系统的输入法,而 Emacs
系统自己的中文输入法使用体验又非常糟糕。除此之外更重要的问题就是在我每次打开 Emacs
时,编辑界面会不断写入 n
字符,如果我不进行任何操作,便会一直输入,这在编辑文件时非常让人恼火,总不能每次打开 Emacs
还要先删除一遍多出来的这些 n
字符吧。于是我最终在一番折腾之后,还是尝试使用 Windows
原生程序进行配置了。
# Windows
原生程序
相比于 Linux
子系统下的 Emacs
程序, Windows
原生的 Emacs
程序对于中文的支持要好得多,系统的输入法也能够直接调用,这方面的配置可以直接省略。在此之外, Windows
安装一些配置的时候可能会要稍微麻烦一些,因为 Windows
下的 Emacs
程序会在 C:\Users\YourUserName\AppData\Roaming
路径下建立 .emacs.d
文件夹作为配置文件的存放位置。因此这里参考了别人的做法,在其中的 init.el
文件中写入了以下内容让其读取对应路径下的配置:
(setenv "HOME" "D:/Programs/Emacs") | |
(setenv "PATH" "D:/Programs/Emacs") | |
;;set the default file path | |
(setq default-directory "D:/Programs/Emacs") | |
(load-file "D:/Programs/Emacs/.emacs.d/init.el") |
虽然配置的时候麻烦了一些,但是总的来说还算比较方便,也没有快捷键的问题。
# Emacs 配置
在之前的文章中推荐过一个 Emacs
配置[3],但是这个配置对中文的适配并不友好,而且很多东西确实用不到,所以我又搜索了一些其他的配置。下面算是对这个愉快心酸的配置过程的一个记录。
# Spacemacs
和 Doom Emacs
在 GitHub
上可以搜索的许多人提供的 Emacs
配置,目前最热门的应该是 Spacemacs
[4] 和 Doom Emacs
[5]。但是这两个配置都比较庞大,添加的内容很多,而且在安装时因为需要从 GitHub
下载内容,经常安装到一半就因为网络问题出错。
尤其是 Doom Emacs
,虽然在 Emacs China
有相关教程帖[6],但是期间也还是会碰到许多问题。
主要的一个问题就是 clone
Github
下的 repo
的时候经常无法成功,在配置了以下内容的时候才算是正常安装完成了:
git config --global url.https://github.com.cnpmjs.org/.insteadof https://github.com/ |
这个是将 github.com
的域名替换成 github.com.cnpmjs.org
的镜像域名,确实在下载的时候速度要快很多。但是在完成安装之后发现 Emacs
无法正常读取 Doom Emacs
的配置,我个人估计应该是路径问题。但是我之前使用 purcell 的配置又是可以的,估计应该是 Doom Emacs
的配置特殊一点。
于是我只能再尝试其他的配置了。
# Centaur Emacs
最终我选择了 Centaur Emacs
,尽管没有 Spacemacs
和 Doom Emacs
那么流行,但是目前也有 1.5k 的 Star,而且作者应该是中国人,对中文的支持也更好。安装非常简单,使用:
git clone --depth 1 https://github.com/seagle0128/.emacs.d.git ~/.emacs.d |
将 repo
clone
下来之后即可使用。在第一次启动的时候,会下载安装一些插件,因此会比较慢一些。在安装过程中,可能会报出一些错误,如果是 package
找不到的错误,那么安装即可。我这里记录一些其他的错误,读者也可以参考其他的文章[7]。
# 图标及字体下载
Centaur Emacs
使用到了一些图标,因此需要安装相应的字体才能够显示,使用 M-x all-the-icons-install-fonts
能够安装相应的字体。但是这个指令是访问 raw.githubusercontent.com
这个域名进行下载,因此不使用代理就无法顺利下载。尽管我这里有代理,但是依然无法下载成功,虽然我在浏览器中是能够成功使用代理的,不知道是哪里没有配置对。一番搜索之后发现只要在网页中下载,然后将字体安装到系统中即可。其他问题可以参考 GitHub
仓库下的 issue
。
将 https://github.com/domtronn/all-the-icons.el
[8] 这个 repo
中的 fonts
文件夹下的字体安装好即可顺利显示图标。
不过有个图标还是显示异常,所以最终我还是决定关掉这个图标,在 custom.el
中将 (setq centaur-icon nil)
的注释去掉即可。
经过一番查找,最终发现应该是 Unicode
字符显示异常,在 custom.el
中字体设置相关的语句中,将 (cl-loop for font in '("Symbola" "Apple Color Emoji" "Segoe UI Symbol" "Symbol")
中的字体顺序调整成了现在的这个顺序,默认优先使用 Symbola
字体,现在显示已经正常。
# Dashboard 不显示信息
在 repo
下的 issue[9] 中找到了相同的问题,解决方法是将 .emacs.d
下的 elpa
文件夹删除,然后重新打开 Emacs
重新安装即可。
# org-mode 显示效果修改
我个人主要使用 Emacs
的 org-mode
,发现对于字体显示效果,配置会将 *
, +
等特殊字体效果的标记符号给隐藏,这和我的习惯不同,在 list\init-org.el
配置文件中修改 org-hide-emphasis-markers
为 nil
。
尽管如此,汉字斜体无法显示出倾斜的效果,这个应该是因为汉字字体没有真正的斜体字体,而是通过其他方式得到倾斜的效果,而 Emacs
是直接读取倾斜字体来显示倾斜效果的,对于没有倾斜字体的英文字体也无法显示出倾斜效果,因此这里就不折腾中文的显示效果了,可以用下划线或者其他方式体现强调的效果。
# 总结
尽管 Emacs
配置还是花费了很多时间,但也算是有了一些收获,对 Emacs
的配置也稍微有了些了解。在 Doom Emacs
的安装过程中,还发现了 Scoop
这款 Windows
下的包管理器,能够安装 gcc
是确实有些出乎我预料之外的,以后可以试着用 Scoop
来让 Powerline
下的命令和 Linux
终端更趋近一致,这样就不用再因为终端不同而要搜索不同命令了。