diff options
author | Brahmajit Das <brahmajit.xyz@gmail.com> | 2024-03-17 03:26:53 +0530 |
---|---|---|
committer | Brahmajit Das <brahmajit.xyz@gmail.com> | 2024-03-17 03:26:53 +0530 |
commit | 1b0055545ddae2243cf8fd9f1ebc5d96a261eda0 (patch) | |
tree | 83d1e8ca06ac75c7f8bb93079007416acb64e7f5 /lua | |
parent | 6297907cd6e9a5fc66306d5092a3846f2001359c (diff) |
nvim: plugins: completion: for completion settings
Signed-off-by: Brahmajit Das <brahmajit.xyz@gmail.com>
Diffstat (limited to 'lua')
-rw-r--r-- | lua/plugins/completion.lua | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/lua/plugins/completion.lua b/lua/plugins/completion.lua new file mode 100644 index 0000000..85b28b7 --- /dev/null +++ b/lua/plugins/completion.lua @@ -0,0 +1,142 @@ +local has_words_before = function() + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil +end + +-- luasnip setup +local luasnip = require 'luasnip' + +local cmp_kinds = { + Text = "", + Method = "", + Function = "", + Constructor = "", + Field = "", + Variable = "", + Class = "", + Interface = "", + Module = "", + Property = "", + Unit = "", + Value = "", + Enum = "", + Keyword = "", + Snippet = "", + Color = "", + File = "", + Reference = "", + Folder = "", + EnumMember = "", + Constant = "", + Struct = "", + Event = "", + Operator = "", + TypeParameter = "", +} + +-- nvim-cmp setup +local cmp = require('cmp') +cmp.setup { + formatting = { + fields = { "kind", "abbr" }, + format = function(_, vim_item) + vim_item.kind = cmp_kinds[vim_item.kind] or "" + return vim_item + end, + }, + snippet = { + expand = function(args) + require('luasnip').lsp_expand(args.body) -- For `luasnip` users. + end, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + mapping = cmp.mapping.preset.insert({ + ['<C-d>'] = cmp.mapping.scroll_docs(-4), + ['<C-f>'] = cmp.mapping.scroll_docs(4), + ['<C-Space>'] = cmp.mapping.complete(), + ['<CR>'] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Insert, + select = true, + }, + ['<Tab>'] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + ['<S-Tab>'] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + }), + sources = cmp.config.sources({ + { name = 'luasnip', option = { use_show_condition = false } }, + { name = 'nvim_lsp' }, + { name = 'nvim_lsp_signature_help' }, + { name = 'path' }, + { name = 'buffer' }, + { name = 'nvim_lua' }, + }), +} + +-- Set configuration for specific filetype. +cmp.setup.filetype('gitcommit', { + sources = cmp.config.sources({ + { name = 'git' }, -- You can specify the `cmp_git` source if you were installed it. + { name = 'buffer' }, + }), + require("cmp_git").setup(), +}) + +-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). +require 'cmp'.setup.cmdline('/', { + completion = { autocomplete = false }, + sources = { + -- { name = 'buffer' } + { name = 'buffer', opts = { keyword_pattern = [=[[^[:blank:]].*]=] } } + } +}) + +-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). +cmp.setup.cmdline(':', { + completion = { autocomplete = false }, + sources = cmp.config.sources({ + { name = 'path' } + }, { + { name = 'cmdline' } + }) +}) + +-- If you want insert `(` after select function or method item +local cmp_autopairs = require('nvim-autopairs.completion.cmp') +cmp.event:on( + 'confirm_done', + cmp_autopairs.on_confirm_done() +) + +-- lazy loading to get in memory snippets of languages you use +require("luasnip/loaders/from_vscode").lazy_load() + +vim.diagnostic.config({ + virtual_text = false, + signs = true, + underline = false, + update_in_insert = true, + severity_sort = false, + float = { + source = true, + }, +}) |