TabNine太赞了,分享一个Spacemacs配置TabNine Layer的方法


#1

环境

  • Emacs 26.3
  • Spacemacs 0.200.13@26.3
  • company-tabnine 20190829.1801
  • Mac OS X 10.14.5

简介

TabNine是一款基于GPT-2深度学习算法的代码补全工具,它支持23种编程语言,6种编辑器(Emacs, Vim, Visual Studio Code, Atom, IntelliJ IDEA, Sublime Text等),TabNine除了能在pop框中提示补全信息之外,还能给出各个候选词条的概率,效果十分惊艳。

在Spacemacs上,插件company-tabnine提供了一种TabNine的后端实现。

为了支持TabNine,我的思路是使用调用链:auto-completion -> company -> company-tabnine,其中auto-completion是Spacemacs提供的自动补全插件,支持多种后端(company和auto-complete)。

实现

1,创建layer 在Spacemacs上,使用SPC SPCM-x,调出命令功能,进行以下三步创建一个名为tabnine的layer。

  • 输入configuration-layer/create-layer
  • 询问Configuration layer path,使用默认的~/.emacs.d/private/即可,按RETURN
  • 询问Configuration layer name,输入tabnine,按RETURN
  • 询问Create readme? (y or n),输入n

2,配置layer 打开~/.eamcs.d/private/tabnine/package.el文件,写入如下配置:


;;; Code:

;;; 声明tabnine这个layer,并安装compnay-tabnine这个库
(defconst tabnine-packages
  '(company-tabnine)
  )

;;; 初始化company-tabnine这个库
(defun tabnine/init-company-tabnine()
  (use-package company-tabnine
    :ensure t
    :defer t
    :init
    :config)
  )

;;; 配置company-tabnine作为company的后端
(defun tabnine/post-init-company-tabnine()
  (with-eval-after-load 'company
    (add-to-list 'company-backends #'company-tabnine)
    )
  )

;;; packages.el ends here

3,配置.spacemacs 在~/.spacemacsdotspacemacs-configuration-layers添加新定义的layer,即tabnine

;; List of configuration layers to load.
dotspacemacs-configuration-layers
   '(
     auto-completion
     better-defaults
     version-control
     emacs-lisp
     git
     ivy
     tabnine
     )

4,验证TabNine 重启Emacs,新建一个hello.c文件,输入一段代码,即可享受TabNine提供的代码补全功能。

Note: 如果自动补全没有触发,可以手动开启,SPC SPC或者M-x,输入company-mode,提示Company mode enabled in current buffer

欢迎交流:nituchao.com


#2

看着还行啊,TabNine支持所有语言,这样就相当于有了统一补全后端,不需要每个语言配置一个补全后端了,赞~~


#3

tabnine一个问题就是聪明的时候很聪明,但笨的时候非常笨,所以建议能和lsp配合的时候还是配合一起用