spacemacs 是什么?
“Spacemacs is a new way to experience Emacs – a sophisticated and polished set-up focused onergonomics, mnemonics and consistency.”
简而言之,spacemacs 就是给你提供一套功能强大、易于扩展的开箱即用配置,使你基本不需要折腾也可以享受使用 emacs 的快感。So,come on,折腾起来吧!
以下是我的基本环境:
emacs 版本 : emacs 25.2 系统 : ubuntu-MATE 18.10 python : python 3.7.1( anaconda3 )
spacemacs 的安装非常简单,直接将 github 的仓库克隆的家目录的 .emacs.d 目录就可以了
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d之后重启 emacs 时就会自动安装了。安装过程建议选择 vim 跟 helm。
spacemacs 在安装过程中会在家目录下创建 .spacemacs 文件,如果下载插件速度太慢,可以考虑使用清华镜像源,具体使用方法如下:
添加下面的代码到 .spacemacs 的 dotspacemacs/user-init()
(setq configuration-layer--elpa-archives '(("melpa-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/") ("org-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/org/") ("gnu-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")))其他国内的镜像也可以,添加方法与上面一样。
.spacemacs 的基本结构如下图:
可以看到整个文件主要由 4 个函数组成,其中
layers 主要包含对 layer 的相关配置init 主要初始化一些变量,除了对其中的变量值进行修改外,一般不建议进行修改user-init 是用户自定义初始化代码的位置,比如之前配置国内镜像源的代码user-config 包含一些用户的自定义配置 其中,这四个函数执行顺序为 init -> user-init -> layers -> user-config.spacemacs 文件可以在 emacs 中通过 SPC f e d 快速打开进行编辑, 编辑完成后通过 SPC f s 进行保存,然后通过 SPC f e R 重新加载修改过的 .spacemacs 文件。
还有一种方式是在家目录下创建一个 ~/.spacemacs.d/ 的目录,然后将 .spacemacs 文件重命名为 init.el 后存放到 .spacemacs.d/ 目录中,以后我们创建的 layer 也可以放在这里。
之前所说,spacemacs 以 layer 来组织 emacs 的配置,包括我们自定义的配置也可以通过创建一个 layer 来实现。spacemacs 内置了许多 layer,可以通过 SPC h SPC 来进行检索,然后将需要添加的 layer 添加到 .spacemacs 中 layers 函数的 dotspacemacs-configuration-layers 变量中。
注意: 引入的每一个层本质上都是一个 list,只要你开心,可以把每一个层用括号括起来,针对特定层的一些配置可以在这里进行配置。比如后面会提到的 flyspell 的错误就会采用这种方式进行修复。
####2. 添加不包含在 layer 中的包 可以在下列语句中添加想要安装的包,然后下次启动 emacs 时就会自动安装了。如果需要对包进行更多的配置,那么可以创建自己的 layer,然后在自己创建的 layer 中引入。
dotspacemacs-additional-packages '(youdao-dictionary)有时候我们添加的 layer 中有一些自己平时用不到的包,这时候可以在像下面这样删除掉
dotspacemacs-excluded-packages '(org-projectile)创建自己的 layer 可以很方便地将自己的配置进行集中存放,便于管理。
下面是 spacemacs 文档中建议的 layer 结构,我们可以仿照这个结构创建自己的 layer
[layer_name] |__ [local] | |__ [package 1] | | ... | |__ [package n] |-- layers.el |__ packages.el |__ funcs.el |__ config.el |__ keybindings.el [] = directoryspacemacs 内置创建 layer 的命令为 configuration-layer/create-layer,运行之后,会询问 layer 的位置,默认的是 ~/.emacs.d/private/ ,可以通过修改
dotspacemacs-configuration-layer-path '("~/.spacemacs.d/layers")进行调整。之后不要忘了将 layer 添加到 dotspacemacs-configuration-layers 中。
首先需要在 layer 的 package.el 文件中找到下列语句,然后将包名添加进去,如果需要的包不在官方仓库中,可以指定远程 repo 或者本地目录。
(defconst zeamonk-packages '((aweshell :location (recipe :fetcher github :repo "manateelazycat/aweshell")) ) )然后创建包的初始化函数,其格式为 layerName/init-packageName
(defun zeamonk/init-aweshell () (use-package aweshell :config (spacemacs/set-leader-keys "osn" 'aweshell-new) ) )启动 emacs 时出现如下错误:
Error enabling Flyspell mode: (Error: No word lists can be found for the language "zh_CN".)这个错误提示的很明显了,直接关掉中文检查即可
(spell-checking :variables ispell-program-name "aspell" ispell-dictionary "american" spell-checking-enable-by-default nil)码 Python 代码时,代码补全特别是一些第三方库需要 emacs 工作在特定的虚拟环境下,为了解决这个问题 python layer 内置了 pyvenv 来处理虚拟环境,其默认的虚拟环境目录为 ~/.virtualenv,可以通过在初始化时,也就是在 user-init 函数中指定自己的虚拟环境路径
(setenv "WORKON_HOME" "/path/to/virtual/envs/")之后在编辑 py 文件时,可以通过 , V w 调用 pyvenv-workon 命令来选择虚拟环境。
当时吸引我从 vim 转到 emacs 很重要的一个原因就是 emacs 的文档非常齐全,查看也很方便 C-h i 可以快速进入 info 模式,但是不知道为啥,我在装好 emacs 后发现没有 elisp 内置的文档。在这种情况下需要自己去下载 An Introduction to Programming in Emacs Lisp,依次执行下列两步:
移动eintr.info.gz到info目录 $ sudo cp eintr.info.gz /usr/share/info/ $ cd /usr/share/info/ 安装 $ sudo ginstall-info --info-file=eintr.info.gz --dir-file=dir下面几个函数是我在学习 spacemacs 中为了方便自己写的,可以给大家做个参考:
(defun zeamonk-quick-eval-a-s-expr () "quick eval a symbol expression" (interactive) (save-excursion (progn (move-end-of-line 1) (call-interactively #'eval-last-sexp)) ) ) (defun zeamonk-quick-eval-selected-region () "eval a selected region" (interactive) (progn (call-interactively #'eval-region) (evil-force-normal-state) ) ) (defun zeamonk-truncate-lines () "turncate-lines in org-mode" (interactive) (setq truncate-lines nil) (visual-line-mode))欢迎关注公众号 LazyMonk,不定时分享好玩的代码