Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/codota/tabnine-nvim
Tabnine Client for Neovim
https://github.com/codota/tabnine-nvim
Last synced: about 1 month ago
JSON representation
Tabnine Client for Neovim
- Host: GitHub
- URL: https://github.com/codota/tabnine-nvim
- Owner: codota
- Created: 2022-11-28T12:03:34.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-07-23T04:23:26.000Z (5 months ago)
- Last Synced: 2024-08-03T12:15:34.657Z (4 months ago)
- Language: HTML
- Homepage: https://tabnine.com
- Size: 10 MB
- Stars: 329
- Watchers: 10
- Forks: 31
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
- awesome-vim-llm-plugins - codota/tabnine-nvim
README
[![Tabnine Chat Support](https://github.com/codota/tabnine-nvim/blob/master/chat/ticker.png)](#tabnine-chat---beta)
# tabnine-nvim
Tabnine client for Neovim![Tabnine Neovim client](https://github.com/codota/tabnine-nvim/blob/master/examples/javascript.gif)
## Table of Contents
- [Install](#install)
- [Unix (Linux, MacOS)](#unix-linux-macos)
- [Windows](#windows)
- [Activate (mandatory)](#activate-mandatory)
- [Activate Tabnine Pro](#activate-tabnine-pro)
- [Tabnine Chat - BETA](#tabnine-chat---beta)
- [Commands](#commands)
- [Tabnine Chat commands](#tabnine-chat-commands)
- [`` and `nvim-cmp`](#tab-and-nvim-cmp)
- [lualine integration](#lualine-integration)
- [Other statusline integrations](#other-statusline-integrations)
- [Tabnine Enterprise customers (self hosted only)](#tabnine-enterprise-customers-self-hosted-only)
- [Keymaps examples](#keymaps-examples)## Install
**Note** this plugin requires having [Neovim](https://github.com/neovim/neovim) version >= v0.7
The _Unix_ build script requires `curl` and `unzip` to be available in your `$PATH`
### Unix (Linux, MacOS)
Using [vim-plug](https://github.com/junegunn/vim-plug)
1. Add the following in your `init.vim`
```vim
call plug#begin()
Plug 'codota/tabnine-nvim', { 'do': './dl_binaries.sh' }
call plug#end()
```2. Restart Neovim and run `:PlugInstall`
Using [packer](https://github.com/wbthomason/packer.nvim)
1. Add the following in your `init.lua`:
```lua
require("packer").startup(function(use)
use { 'codota/tabnine-nvim', run = "./dl_binaries.sh" }
end)
```2. Restart Neovim and run `:PackerInstall`
Using [lazy.nvim](https://github.com/folke/lazy.nvim)
1. Add the following in your `init.lua`:
```lua
require("lazy").setup({
{ 'codota/tabnine-nvim', build = "./dl_binaries.sh" },
})
```2. Restart Neovim and run `:Lazy`
### Windows
The build script needs a set execution policy.
Here is an example on how to set it```Powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```For more information visit
[the official documentation](https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.2)Windows installations need to be adjusted to utilize PowerShell. This can be accomplished by changing the `do`/`run`/`build` parameter in your plugin manager's configuration from `./dl_binaries.sh` to `pwsh.exe -file .\\dl_binaries.ps1`
```Lua
-- Example using lazy.nvim
-- pwsh.exe for PowerShell Core
-- powershell.exe for Windows PowerShellrequire("lazy").setup({
{ 'codota/tabnine-nvim', build = "pwsh.exe -file .\\dl_binaries.ps1" },
})
```If you need to use Tabnine on Windows and Unix you can change the config as follows
```lua
-- Get platform dependant build script
local function tabnine_build_path()
-- Replace vim.uv with vim.loop if using NVIM 0.9.0 or below
if vim.uv.os_uname().sysname == "Windows_NT" then
return "pwsh.exe -file .\\dl_binaries.ps1"
else
return "./dl_binaries.sh"
end
end
require("lazy").setup({
{ 'codota/tabnine-nvim', build = tabnine_build_path()},
})
```---
## Activate (mandatory)
Add this later in your `init.lua`:
```lua
require('tabnine').setup({
disable_auto_comment=true,
accept_keymap="",
dismiss_keymap = "",
debounce_ms = 800,
suggestion_color = {gui = "#808080", cterm = 244},
exclude_filetypes = {"TelescopePrompt", "NvimTree"},
log_file_path = nil, -- absolute path to Tabnine log file
ignore_certificate_errors = false,
})
````init.vim` users - the activation script is `lua` code. Make sure to have it inside `lua` block:
```vim
lua <", function()
if require("tabnine.keymaps").has_suggestion() then
return require("tabnine.keymaps").accept_suggestion()
elseif require("luasnip").jumpable(1) then
return require("luasnip").jump(1)
else
return ""
end
end, { expr = true })
```## Activate Tabnine Pro
- `:TabnineHub` - to open Tabnine Hub and log in to your account
- `:TabnineLoginWithAuthToken` - to log in using auth token (for headless environments, where no browser is available)Sometimes Tabnine may fail to open the browser on Tabnine Hub, in this case use `:TabnineHubUrl` to get Tabnine Hub URL
## Tabnine Chat - BETA
![Tabnine Neovim chat](https://github.com/codota/tabnine-nvim/blob/master/examples/lua-chat.gif)
Tabnine Chat is still in BETA and is available only for Tabnine Pro users. To make it work:
- You will need to build the chat from source, by executing: `cargo build --release` inside `chat/` directory.
- You may be missing some dependencies to build the chat. To fix this, run the following command:
```shell
$ # Debian/Ubuntu
$ sudo apt-get install -y libgtk-3-dev libglib2.0-dev libjavascriptcoregtk-4.1-dev libsoup-3.0-dev libwebkit2gtk-4.1-dev
$ # Arch
$ pacman -S --needed gtk3 glib2 webkit2gtk-4.1 libsoup3
```## Commands
- `:TabnineStatus` - to print Tabnine status
- `:TabnineDisable` - to disable Tabnine
- `:TabnineEnable` - to enable Tabnine
- `:TabnineToggle` - to toggle enable/disable
- `:TabnineChat` - to launch Tabnine chat
- `:TabnineLoginWithAuthToken` - to log in using auth token (for headless environments, where no browser is available)### Tabnine Chat commands
- `:TabnineChat` - to open Tabnine Chat
- `:TabnineFix` - to fix the function in scope
- `:TabnineTest` - to generate tests for function in scope
- `:TabnineExplain` - to explain the function in scope## `` and `nvim-cmp`
`nvim-cmp` maps `` to navigating through pop menu items (see [here](https://github.com/hrsh7th/nvim-cmp/blob/777450fd0ae289463a14481673e26246b5e38bf2/lua/cmp/config/mapping.lua#L86)) This conflicts with Tabnine `` for inline completion. To get this sorted you can either:
- Bind Tabnine inline completion to a different key using `accept_keymap`
- Bind `cmp.select_next_item()` & `cmp.select_prev_item()` to different keys, e.g: `` & ``## lualine integration
This plugin exposes a lualine `tabnine` component. e.g:
```lua
require('lualine').setup({
tabline = {
lualine_a = {},
lualine_b = {'branch'},
lualine_c = {'filename'},
lualine_x = {},
lualine_y = {},
lualine_z = {}
},
sections = {lualine_c = {'lsp_progress'}, lualine_x = {'tabnine'}}
})
```## Other statusline integrations
To render tabnine status widget use:
```lua
require('tabnine.status').status()
```## Tabnine Enterprise customers (self hosted only)
In your `init.lua`:
_these instructions are made for packer, but are pretty much the same with all package managers_
```lua
local tabnine_enterprise_host = "https://tabnine.customer.com"require("packer").startup(function(use)
use { 'codota/tabnine-nvim', run = "./dl_binaries.sh " .. tabnine_enterprise_host .. "/update" }
end)require('tabnine').setup({
disable_auto_comment=true,
accept_keymap="",
dismiss_keymap = "",
debounce_ms = 800,
suggestion_color = {gui = "#808080", cterm = 244},
codelens_color = { gui = "#808080", cterm = 244 },
codelens_enabled = true,
exclude_filetypes = {"TelescopePrompt", "NvimTree"},
log_file_path = nil, -- absolute path to Tabnine log file,
tabnine_enterprise_host = tabnine_enterprise_host,
ignore_certificate_errors = false,
})
```## Keymaps examples
```lua
api.nvim_set_keymap("x", "q", "", { noremap = true, callback = require("tabnine.chat").open })
api.nvim_set_keymap("i", "q", "", { noremap = true, callback = require("tabnine.chat").open })
api.nvim_set_keymap("n", "q", "", { noremap = true, callback = require("tabnine.chat").open })
```