Pythoner 的 spacemacs 入门指北

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 )

0x01 安装与基本配置

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/")))

其他国内的镜像也可以,添加方法与上面一样。

0x02 spacemacs 配置文件结构

.spacemacs 的基本结构如下图:

01-00.png

可以看到整个文件主要由 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 也可以放在这里。

0x03 配置 layers

1.加载新的 layer

之前所说,spacemacs 以 layer 来组织 emacs 的配置,包括我们自定义的配置也可以通过创建一个 layer 来实现。spacemacs 内置了许多 layer,可以通过 SPC h SPC 来进行检索,然后将需要添加的 layer 添加到 .spacemacs 中 layers 函数的 dotspacemacs-configuration-layers 变量中。

01-01.png

注意: 引入的每一个层本质上都是一个 list,只要你开心,可以把每一个层用括号括起来,针对特定层的一些配置可以在这里进行配置。比如后面会提到的 flyspell 的错误就会采用这种方式进行修复。

####2. 添加不包含在 layer 中的包
可以在下列语句中添加想要安装的包,然后下次启动 emacs 时就会自动安装了。如果需要对包进行更多的配置,那么可以创建自己的 layer,然后在自己创建的 layer 中引入。

dotspacemacs-additional-packages '(youdao-dictionary)

3. 删除用不到的包

有时候我们添加的 layer 中有一些自己平时用不到的包,这时候可以在像下面这样删除掉

dotspacemacs-excluded-packages '(org-projectile)

0x04 创建自己的 layer

创建自己的 layer 可以很方便地将自己的配置进行集中存放,便于管理。

1. layer 基本结构

下面是 spacemacs 文档中建议的 layer 结构,我们可以仿照这个结构创建自己的 layer

[layer_name]
  |__ [local]
  | |__ [package 1]
  | |     ...
  | |__ [package n]
  |-- layers.el
  |__ packages.el
  |__ funcs.el
  |__ config.el
  |__ keybindings.el

[] = directory

2. 创建 layer

spacemacs 内置创建 layer 的命令为
configuration-layer/create-layer,运行之后,会询问 layer 的位置,默认的是 ~/.emacs.d/private/ ,可以通过修改

dotspacemacs-configuration-layer-path '("~/.spacemacs.d/layers")

进行调整。之后不要忘了将 layer 添加到 dotspacemacs-configuration-layers 中。

3. 在 layer 中安装新的包

首先需要在 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)
    )
  )

0x05 一些更好的配置

1. 修复 flyspell 中文错误

启动 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)

2. python 虚拟环境使用

码 Python 代码时,代码补全特别是一些第三方库需要 emacs 工作在特定的虚拟环境下,为了解决这个问题 python layer 内置了 pyvenv 来处理虚拟环境,其默认的虚拟环境目录为 ~/.virtualenv,可以通过在初始化时,也就是在 user-init 函数中指定自己的虚拟环境路径

(setenv "WORKON_HOME" "/path/to/virtual/envs/")

之后在编辑 py 文件时,可以通过 , V w 调用 pyvenv-workon 命令来选择虚拟环境。

3. 导入elisp手册

当时吸引我从 vim 转到 emacs 很重要的一个原因就是 emacs 的文档非常齐全,查看也很方便 C-h i 可以快速进入 info 模式,但是不知道为啥,我在装好 emacs 后发现没有 elisp 内置的文档。在这种情况下需要自己去下载 An Introduction to Programming in Emacs Lisp,依次执行下列两步:

  1. 移动eintr.info.gz到info目录
$ sudo cp eintr.info.gz /usr/share/info/
$ cd /usr/share/info/
  1. 安装
$ sudo ginstall-info --info-file=eintr.info.gz --dir-file=dir 

4. 几个方便 hack 的函数

下面几个函数是我在学习 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))

5. 对 spacemacs 改进的配置

  1. 修改 evil 的 escape 键
    习惯了 vim 的同学一般会将 esc 映射为 j jj k,毕竟使用 esc实在是太反人类了, spacemacs 通过 evil-escape 插件来实现这个功能,可以自己通过下列语句定义:
(setq-default evil-escape-key-sequence "jk")
  1. jk移动时以屏幕行为单位
(define-key evil-normal-state-map (kbd "j") 'evil-next-visual-line)
(define-key evil-normal-state-map (kbd "k") 'evil-previous-visual-line)
  1. 补全时使用 C-nC-p来选择补全项
(define-key evil-insert-state-map (kbd "C-n") 'company-select-next)
(define-key evil-insert-state-map (kbd "C-p") 'company-select-previous)

欢迎关注公众号 LazyMonk,不定时分享好玩的代码
qcode.jpg

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zeamonk

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值