刚刚试了 Spacemacs develop 分支,启动发现报错
(void-function spacemacs|defvar-company-backends)
找了找发现这个 macro 不见了。
去 github 上翻了翻发现了原因。
主要是有人觉得需要在每个 config.el 里面定义 company backends 太麻烦,就把这两个取消了。
新的用法是:
(defun org/post-init-company ()
- (spacemacs|add-company-hook org-mode)
- (push 'company-capf company-backends-org-mode))
+ (spacemacs|add-company-backends :backends company-capf :modes org-mode))
(defun org/post-init-company-emoji ()
- (push 'company-emoji company-backends-org-mode))
+ (spacemacs|add-company-backends :backends company-emoji :modes org-mode))
给大家踩个坑。
不敢随便更新。怕踩坑。
这次我用上了develop是因为手贱试了develop以后切回去反而有bug。所以干脆用上了develop branch
我已经踩习惯了,已经到了有些bug只有不影响使用就不管它的地步
感谢,我注释掉了 config.el 里的那几句。但是发现 packages.el 里的 add-company-hook 成了 void function。。楼主你这边没报错么,我的版本是最新的 0.300.0 昨天刚更新
LdBeth
6
有段时间没用 Spacemacs 啦。。。现在用自己的配置了。
这里设置company-backends的方法是需要修改相应layer的package.el吗?但是这样做的话,如果更新spacemacs岂不是做过的修改就都消失了?能直接把修改添加在.spacemacs文件中吗?
老早以前的事了,而且只有自己写 layer 的从 master 切到 develop 才要改。正常来说你完全不需要改 Spacemacs 自带的东西,修改消失也无从谈起。
那我要是想在latex这个layer中添加company-reftex-labels这个backend,是直接把相应的latex/init-company-reftex函数写在.spacemacs里,还是说我直接在.spacemacs里面添加(add-to-list 'company-backends ‘company-reftex-labels)就可以?但是感觉spacemacs是把latex相关的补全后端储存在一个company-backends-LaTeX-mode变量里。
那就用 company-backends-LaTeX-mode
我直接在user/config里面直接用add-to-list修改company-backends-LaTeX-mode的值,发现并没有作用,这个变量的值没有任何变化。
`spacemacs|add-company-backends’
文档里说spacemacs|add-company-backends这个函数只能用在init-company-xxx这种函数中,我就直接把加在package.el中的配置抄到user/config中了,并没有任何作用,是哪里用错了吗?
(defun latex/init-company-reftex ()
(use-package company-reftex
:defer t
:init (spacemacs|add-company-backends
:backends
company-reftex-labels
company-reftex-citations
:modes LaTeX-mode)))
(add-hook 'Tex-mode-hook 'latex/init-company-reftex)
初始函数不是这么用的,你可以直接修改 latex layer 的 package.el 文件,或者把它放到你的 private layer 里,最后那个钩子没有必要。比如放到名为 my-latex
的私有 layer 中:
(defun my-latex/init-company-reftex ()
(use-package company-reftex
:defer t
:init (spacemacs|add-company-backends
:backends
company-reftex-labels
company-reftex-citations
:modes LaTeX-mode)))
2 个赞
我也觉得这样不对,但是修改latex layer中的文件,更新spacemacs话就会被覆盖掉,而用private layer对我这种新手有点头疼啊。
private layer 非常简单,你用下面的命令生成一个模板,然后填空。最简单的情况,就把上面这个函数填进去就好了。
写在自己layer里能解决的,放在user-config
里肯定也可以啊,自己加layer不过是另一种组织方式……在layer的文件里的my/init-some-package
spacemacs会去调用,放在user-config
里就是defun
了之后没人去调它。
user-config
里直接(use-package ...)
应该和楼上et的做法是一样的效果。