A company-mode backend for TabNine, the all-language autocompleter: https://tabnine.com/
TabNine is the all-language autocompleter. It uses machine learning to provide responsive, reliable, and relevant suggestions.
company-tabnineprovides TabNine completion backend for company-mode. It takes care of TabNine binaries, so installation is easy.
With Deep TabNine:
Make sure company-mode is installed and configured.
Install
company-tabnine. This package is part of MELPA.
Note: See https://melpa.org/#/getting-started for MELPA usage. Make sure to use the "bleeding-edge" repository instead of MELPA stable.
With use-package
Put the following in your config:
(use-package company-tabnine :ensure t)
With
package.el(built-in)
Install the package:
emacs M-x package-install RET company-tabnine RET
Put the following in your config:
emacs (require 'company-tabnine)
Add
company-tabnineto
company-backends
emacs (add-to-list 'company-backends #'company-tabnine)
Run
M-x company-tabnine-install-binaryto install the TabNine binary for your system.
Below are some recommended
company-modeconfiguration that works well with
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)
company-tabnineshould work out of the box.
See
M-x customize-group RET company-tabnine RETfor customizations.
TabNine can automatically balance parentheses, by removing and adding closing parentheses after the cursor. See the examples here.
Note: The automatically-balancing happens in company's
post-completionhook. However,
company-tng-frontendactually suppresses this hook. In order to use automatic parentheses balancing, you need to manually call
company-complete-selectionor similar commands in this case, which will almost always happen if you do not use
company-tng-frontend.
company-transformersor plugins that use it (such as
company-flx-mode) can interfere with TabNine's sorting. If this happens, put the following temporary workaround in your config:
;; workaround for company-transformers (setq company-tabnine--disable-next-transform nil) (defun my-company--transform-candidates (func &rest args) (if (not company-tabnine--disable-next-transform) (apply func args) (setq company-tabnine--disable-next-transform nil) (car args)))(defun my-company-tabnine (func &rest args) (when (eq (car args) 'candidates) (setq company-tabnine--disable-next-transform t)) (apply func args))
(advice-add #'company--transform-candidates :around #'my-company--transform-candidates) (advice-add #'company-tabnine :around #'my-company-tabnine)
Spacemacs configurations can override the settings for
company-backends.
Conflict with ESS: See https://github.com/emacs-ess/ESS/issues/955
TabNine's local deep learning completion might be enabled by default. It is very CPU-intensive if your device can't handle it. You can check by typing "TabNine::config" in any buffer (your browser should then automatically open to TabNine's config page) and disable Deep TabNine Local (you will lose local deep learning completion).