我曾经是 vim 的忠实用户。去年开始尝试使用 emacs。即便花了很多时间记忆键位和指令,我在 emacs 上却始终不能达到 vim 的编辑效率。后来,我听说了 evil mode,也就是在 emacs 中使用 vim 键位的模式。把 evil mode 与自动补全、模糊查询等强大功能整合到一起的,是一款名为 spacemacs 的编辑器。在这一系列文章中,我将讲解如何高效地使用 spacemacs —— vim 和 emacs 的集大成者。
系列目录
- spacemacs:安装与配置
- spacemacs:evil mode
安装 spacemacs
安装 spacemacs 的难度取决于 emacs 的版本。如果版本(emacs --version
)不低于 24.4,安装过程会简单得令人发指:
1 | git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d |
否则,请先花上看一篇公众号文章的时间从源代码安装新版的 emacs。不用担心,这个过程没有想象中那么可怕。下面是我在 ubuntu 上安装 emacs 25.1 使用的指令。
1 | sudo apt-get install -y autoconf automake libtool texinfo build-essential \ |
为了让 spacemacs 正常工作,你必须清理掉 ~/.emacs
文件,并且拥有 ~/.emacs.d
的所有权。
安装字体
spacemacs 默认使用 Source Code Pro 字体。在各类等间距字体中,Source Code Pro 字形优雅,辨识度很高,适合开发者使用。在 macOS 和 windows 平台下,使用系统工具导入下载的字体文件即可。考虑到 Linux 的复杂性,我给出了 ubuntu 安装该字体的方法。
1 | wget https://github.com/adobe-fonts/source-code-pro/archive/2.030R-ro/1.050R-it.tar.gz |
安装 layer 依赖
spacemacs 中相关功能的插件/扩展包以 layer 的形式聚合在一起。有不少 layer 的功能无法使用 Emacs Lisp 脚本实现,它们依赖于其他的软件包才能正常工作。以 Python layer 为例,其文档(位于~/.emacs.d/layers/+lang/python/README.org
)明确指出了它的外部依赖。比如,获取自动补全功能,需要 anaconda-mode
:
1 | pip install --upgrade "jedi>=0.9.0" "json-rpc>=1.8.1" "service_factory>=0.1.5" |
请跟据你开启的 layer 自行补充所需的外部依赖,我在这里就不一一列举了。
配置 spacemacs
首次启动 spacemacs 时,它会从网络下载一系列扩展包,放置于 ~/.emacs.d/elpa
文件夹下。同时,它会提供几个简单的选项,用于初始化 ~/.spacemacs
配置文件。这个配置文件有几个地方值得注意。
dotspacemacs-configuration-layers
是启用的 layer 列表。初始列举的 layer 大多被双引号注释掉了,你可以移除注释使用它们,同时自行添加其他的 layer。一定要启用 auto-completion
和 heml
,它们是 spacemacs 的灵魂所在。另外可使用 themes-megapack
下载各类皮肤。
dotspacemacs-editing-style
是默认编辑模式。evil mode 对应的值为 'vim
。evil mode 的详解请见后续文章。
dotspacemacs-themes
用于设置皮肤。我个人最喜欢farmhouse-dark
。想挑皮肤去 这个网站 就好了。
dotspacemacs-maximized-at-startup
在启动时自动最大化窗口。把这个值设置为 t
以获得沉浸式的编辑体验。若想要全屏运行 spacemacs,请改写 dotspacemacs-fullscreen-at-startup
。
dotspacemacs-line-numbers
设置是否显示行号。nil
隐藏,t
则显示出来。
dotspacemacs-whitespace-cleanup
删除多余的空白,推荐设置为'trailing
。
关于 spacemacs 的更多设置有待我进一步挖掘。
如果你只想在终端内运行 spacemacs 而不打开新的窗口,emacs -nw
可以满足你的需求。除了用 unicode 字符代替了精细的图标外,终端版的 spacemacs 与 GUI 版没有本质不同。ssh 和 tmux 的用户这回不会失望了。
咱们下回见!