TabNine source for hrsh7th/nvim-cmp
Using plug:
Plug 'tzachar/cmp-tabnine', { 'do': './install.sh' }
Using plug on windows:
Plug 'tzachar/cmp-tabnine', { 'do': 'powershell ./install.ps1' }
Using Packer:
return require("packer").startup(
function(use)
use "hrsh7th/nvim-cmp" --completion
use {'tzachar/cmp-tabnine', run='./install.sh', requires = 'hrsh7th/nvim-cmp'}
end
)
Using Packer on windows:
return require("packer").startup(
function(use)
use "hrsh7th/nvim-cmp" --completion
use {'tzachar/cmp-tabnine', after = "nvim-cmp", run='powershell ./install.ps1', requires = 'hrsh7th/nvim-cmp'}
end
)
And later, enable the plugin:
require'cmp'.setup {
sources = {
{ name = 'cmp_tabnine' },
},
}
local tabnine = require('cmp_tabnine.config')
tabnine:setup({
max_lines = 1000;
max_num_results = 20;
sort = true;
run_on_every_keystroke = true;
snippet_placeholder = '..';
ignored_file_types = { -- default is not to ignore
-- uncomment to ignore in lua:
-- lua = true
};
})
How many lines of buffer context to pass to TabNine
How many results to return
Sort results by returned priority
Generate new completion items on every keystroke. For more info, check out #18
Indicates where the cursor will be placed in case a completion item is a snippet. Any string is accepted.
For this to work properly, you need to setup snippet support for nvim-cmp
.
Which file types to ignore. For example:
ignored_file_types = {
html = true;
}
will make cmp-tabnine
not offer completions when vim.bo.filetype
is html
.
You can use the following to pretty print the completion menu (requires lspkind and patched fonts (https://www.nerdfonts.com)):
local lspkind = require('lspkind')
local source_mapping = {
buffer = "[Buffer]",
nvim_lsp = "[LSP]",
nvim_lua = "[Lua]",
cmp_tabnine = "[TN]",
path = "[Path]",
}
require'cmp'.setup {
sources = {
{ name = 'cmp_tabnine' },
},
formatting = {
format = function(entry, vim_item)
vim_item.kind = lspkind.presets.default[vim_item.kind]
local menu = source_mapping[entry.source.name]
if entry.source.name == 'cmp_tabnine' then
if entry.completion_item.data ~= nil and entry.completion_item.data.detail ~= nil then
menu = entry.completion_item.data.detail .. ' ' .. menu
end
vim_item.kind = ''
end
vim_item.menu = menu
return vim_item
end
},
}
cmp-tabnine
adds a priority entry to each completion item,
which can be used to override cmp
's default sorting order:
local compare = require('cmp.config.compare')
cmp.setup({
sorting = {
priority_weight = 2,
comparators = {
require('cmp_tabnine.compare'),
compare.offset,
compare.exact,
compare.score,
compare.recently_used,
compare.kind,
compare.sort_text,
compare.length,
compare.order,
},
},
}