在论坛上看到好几位大神推荐 TabNine,说这是一个会深度学习的补全工具。在 doom-emacs 里简单的用 (package! company-tabnine)倒是安装上了,然后按照说明把 TabNine 加入到 backends 里:
1
| (add-to-list 'company-backends #'company-tabnine)
|
重启 emacs 后执行 M-x company-tabnine-install-binary 安装 TabNine 服务程序,然后应该就可以啦。 可是、但是、可但是,无效! 查看变量 company-backends 的值,发现是(company-capf company-yasnippet company-tabnine),这样把 tabnine 放在了最后,只要前面两个插件能够输出结果,tabnine 就永远不会出结果,至于为什么 company-tabnine 被排在了最后,目前不清楚 doom-emacs 是怎么个逻辑。不知道该怎么设置了,去 doom-emacs 的 discord 讨论组搜索看看,发现可以用 set-company-backend!进行设置,于是尝试配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| (def-package! company-tabnine
:when (featurep! :completion company)
:config
(set-company-backend! '(c-mode
c++-mode
java-mode
haskell-mode
emacs-lisp-mode
lisp-mode
sh-mode
perl-mode
php-mode
python-mode
go-mode
ruby-mode
rust-mode
js-mode
css-mode
web-mode
org-mode)
'(company-tabnine))
;; Trigger completion immediately.
;; (setq company-idle-delay 0)
;; Number the candidates (use M-1, M-2 etc to select completions).
(setq company-show-numbers t)
;; Use the tab-and-go frontend.
;; Allows TAB to select and complete at the same time.
(company-tng-configure-default)
(setq company-frontends
'(company-tng-frontend
company-pseudo-tooltip-frontend
company-echo-metadata-frontend))
)
|
重启 emacs,查看 company-backends,果然把 company-tabnine 排在第一位,打开一个示例文件测试,成功!另外还可以把’(company-tabnine)加上其他的补全插件,让多个插件共同起作用,如改成’(company-tabnine company-yasnippet),这样配置则更灵活。
**8 月 20 日更新:** 经过研究 doom-emacs 代码,发现进行如下设置更简单:
1
2
| (set-company-backend! 'prog-mode
'company-tabnine 'company-capf 'company-yasnippet)
|
如果启用 lsp-mode,那再进行如下设置,即可同时使用 company-lsp 和 company-tabnine 进行补全:
1
| (setq +lsp-company-backend '(company-lsp :with company-tabnine :separate))
|