0%

spacemacs 修复记

好久时间没有更新spacemacs了,一直到今天,我还是运行的spacemacs 0.105版本,因为它一直以来都很稳定。今天手贱点了update packages, 在Emacs备份完当前packages之后,重启Emacs就出现报错 Error encountered while loading .spacemacs
好吧,着手修复。

查明问题

在终端使用命令

1
$ emacs --insecure --debug-init

报错的第一条信息是error unable to activate package pythonic, required package f-0.17.2 is unavailable
最初我以为是elpa被干扰无法访问的问题, 配置代理之后仍然没有效果。在一番搜索之后找到了一个与我的问题相类似的issue: anzu package missing . 参考syl20bnr给出的建议,找到解决方法

解决问题

  1. 删除elpa文件夹内所有的内容再重装
    1
    2
    cd .emacs.d
    rm -rf elpa
  2. Emacs会自动重新安装所有的依赖包,但是由于国内网络的问题,200多个包安装起来很慢。最终我选择了使用清华大学开源软件镜像站提供的ELPA镜像源,速度快了很多。
    参考清华大学镜像站的官方文档,在.spacemacs的dotspacemacs/user-init() 添加如下代码:
    1
    2
    3
    4
    (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/")))
  3. 配置完之后重新安装仍然报错:package org-plus-contrib is not availabe. Is the package name misspelled? 查阅org-mode 官方文档后,问题得到了解决。在.spacemacs文件中加入这两行:
    1
    2
    (require 'package)
    (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
    Org Emacs Package Archive 官网是这样介绍的:

    org
    contains the same set of files that are included in GNU Emacs.
    org-plus-contrib
    contains these files plus all contribs files, the ones you find in contrib/ from the git repo.

手动更新

自带的check update一直失败,参考官方文档手动更新:

1
2
git fetch
git reset --hard <tag version which you are updating to>

j/k for browsing wrapped lines

在使用spacemacs 的evil mode 浏览文本时,经常会出现一个长句子本身在屏幕上显示为两行,但是实际上为一整行的情况,这时使用jk 上下移动的时候,会跳过整段话。在使用vim 的时候,我们可以自定义keymap,例如:

1
2
3
4
nnoremap j gj
nnoremap k gk
vnoremap j gj
vnoremap k gk

为了解决Emacs 上面同样的问题,我找到了在stackoverflow上面的相关的问答描述。参考排名第一的答案,我找到了适用于spacemacs 的配置。以下步骤来自一位大神写的vim 迁移 Emacs 指南: 手把手教你从Vim迁移到Emacs+Evil

Evil也跟Vim一样,在用j/k浏览很长的行时,会跳过整个”实际”的句子,而不是显示出来的行. 解决方法也很简单:

(define-key evil-normal-state-map (kbd “j”) ‘evil-next-visual-line)
(define-key evil-normal-state-map (kbd “k”) ‘evil-previous-visual-line)

fcitx 集成

类似于vim 的fcitx.vim 插件,Emacs 也有一个package 致力于解决中文fcitx 输入法在编辑器normal state 下需要切换为英文才能输入命令的问题。
安装fcitx.el 即可。不过spacemacs 默认对于不在additional package 列表中的包会在下次启动时识别为 orphan , 因此需要在dotspacemacs 中进行配置:

1
2
dotspacemacs-additional-packages '(fcitx)
;; A list of packages and/or extensions that will not be install and loaded.

安装后选择 aggressive setup:

1
M-x fcitx-default-setup

即可生效。

Tips

  1. Turn off smartparens. You can toggle it with SPC t p. To disable it permanently you can put smartparens in dotspacemacs-excluded-packages. Reference:
    smartparens-reddit