2022-02-10 00:43:30 -08:00
-- Setup nvim-cmp.
2022-04-15 23:21:17 -07:00
local cmp = require ' cmp '
2022-02-10 00:43:30 -08:00
local lspkind = require ( ' lspkind ' )
local capabilities = vim.lsp . protocol.make_client_capabilities ( )
capabilities = require ( ' cmp_nvim_lsp ' ) . update_capabilities ( capabilities )
-- luasnip setup
local luasnip = require ' luasnip '
cmp.setup ( {
snippet = {
2022-04-15 23:21:17 -07:00
expand = function ( args )
-- vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
require ( ' luasnip ' ) . lsp_expand ( args.body ) -- For `luasnip` users.
-- require('snippy').expand_snippet(args.body) -- For `snippy` users.
-- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
end ,
2022-02-10 00:43:30 -08:00
} ,
capabilities = capabilities ,
-- mapping = {
-- ['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }),
-- ['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
-- ['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
-- ['<C-y>'] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
-- ['<C-e>'] = cmp.mapping({
-- i = cmp.mapping.abort(),
-- c = cmp.mapping.close(),
-- }),
-- ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
-- },
mapping = {
2022-04-15 23:21:17 -07:00
[ ' <C-p> ' ] = cmp.mapping . select_prev_item ( ) ,
[ ' <C-n> ' ] = cmp.mapping . select_next_item ( ) ,
[ ' <C-d> ' ] = cmp.mapping . scroll_docs ( - 4 ) ,
[ ' <C-f> ' ] = cmp.mapping . scroll_docs ( 4 ) ,
[ ' <C-Space> ' ] = cmp.mapping . complete ( ) ,
[ ' <C-e> ' ] = cmp.mapping . close ( ) ,
[ ' <CR> ' ] = cmp.mapping . confirm {
behavior = cmp.ConfirmBehavior . Replace ,
select = true ,
} ,
-- ['<Tab>'] = function(fallback)
-- if cmp.visible() then
-- cmp.select_next_item()
-- elseif luasnip.expand_or_jumpable() then
-- luasnip.expand_or_jump()
-- else
-- fallback()
-- end
-- end,
-- ['<S-Tab>'] = function(fallback)
-- if cmp.visible() then
-- cmp.select_prev_item()
-- elseif luasnip.jumpable(-1) then
-- luasnip.jump(-1)
-- else
-- fallback()
-- end
-- end,
2022-02-10 00:43:30 -08:00
} ,
formatting = {
2022-04-15 23:21:17 -07:00
format = lspkind.cmp_format ( {
mode = ' symbol ' , -- show only symbol annotations
2022-04-29 17:09:49 -07:00
maxwidth = 20 , -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters)
2022-02-10 00:43:30 -08:00
2022-04-15 23:21:17 -07:00
-- The function below will be called before any actual modifications from lspkind
-- so that you can provide more controls on popup customization. (See [#30](https://github.com/onsails/lspkind-nvim/pull/30))
-- before = function (entry, vim_item)
-- ...
-- return vim_item
-- end
} )
2022-02-10 00:43:30 -08:00
} ,
sources = cmp.config . sources ( {
2022-04-15 23:21:17 -07:00
{ name = " copilot " , group_index = 2 } ,
{ name = ' nvim_lsp ' , group_index = 2 } ,
-- { name = 'vsnip' }, -- For vsnip users.
{ name = " path " , group_index = 2 } ,
{ name = ' luasnip ' , group_index = 2 } , -- For luasnip users.
-- { name = 'ultisnips' }, -- For ultisnips users.
-- { name = 'snippy' }, -- For snippy users.
2022-02-10 00:43:30 -08:00
} , {
2022-04-15 23:21:17 -07:00
{ name = ' buffer ' } ,
2022-02-10 00:43:30 -08:00
} )
2022-04-15 23:21:17 -07:00
} )
2022-02-10 00:43:30 -08:00
2022-04-15 23:21:17 -07:00
-- Setup lspconfig.
-- local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())
-- Replace <YOUR_LSP_SERVER> with each lsp server you've enabled.
-- require('lspconfig')['bashls'].setup {
-- capabilities = capabilities
-- }
-- Enable some language servers with the additional completion capabilities offered by nvim-cmp
local lspconfig = require ( ' lspconfig ' )
local servers = { ' bashls ' , ' pyright ' , ' sqlls ' , ' jsonls ' , ' yamlls ' , ' vimls ' , ' dotls ' , ' dockerls ' }
for _ , lsp in ipairs ( servers ) do
2022-02-10 00:43:30 -08:00
lspconfig [ lsp ] . setup {
2022-04-15 23:21:17 -07:00
-- on_attach = my_custom_on_attach,
capabilities = capabilities ,
2022-02-10 00:43:30 -08:00
}
2022-04-15 23:21:17 -07:00
end