emacs-error

最近修改emacs配置比较频繁,git提交的时候可能有些改动也没看仔细,clean-aindent-mode包出了问题,导致后面安装一些别的有依赖的包都出了问题,如下图

>File mode specification error: (void-function clean-aindent-mode)

err

使用emacs --debug-info启动,可以看见如下错误打印

err

不安装有依赖的包,启动则报错

>symbol's function definition is void: global-company-mode

第一次尝试修复

感觉是clean-aindent-mode这个包还没生效的时候调用了函数clean-aindent-mode函数,我尝试在安装latex之前先安装一遍clean-aindent-mode, 代码如下

test1

没起作用,google搜了一波,也没有什么信息;于是版本回退,重下spacesmacs等等,一些列努力均失败;

第二次尝试

扫了一遍elisp语法,有灵感,应该是手动加载的方法不对,尝试使用如下方法加载

  • 先手动下载clean-aindent-mode包,见官网
  • clean-aindent-mode.el文件放到~/.spacemacs.d/private/pan目录
  • 使用如下代码手动加载
(add-to-list 'load-path "~/.spacemacs.d/private/pan")
(require 'clean-aindent-mode)

保存,重启,顺利安装包,顺利启动

总结

应该说这是很基本的知识了,但是还是花了好长时间才搞定;于是顺便补齐下基本知识

  • load:导入文件的基本函数,会尝试加后缀导入
  • load-file: 导入特定文件,如果知道文件完整名称,优先使用该函数
  • require:加载还未被加载的包;首先会查看变了features中是否存在所要加载的符号,如果不存在会自动使用load加载
  • autoload:仅在函数调用时加载文件

参考链接

Elisp文档

emacs china