diff options
Diffstat (limited to 'lua/plugins/completion.lua')
-rw-r--r-- | lua/plugins/completion.lua | 302 |
1 files changed, 164 insertions, 138 deletions
diff --git a/lua/plugins/completion.lua b/lua/plugins/completion.lua index 42b1e7c..0340d23 100644 --- a/lua/plugins/completion.lua +++ b/lua/plugins/completion.lua @@ -1,148 +1,174 @@ -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 { - view = { - docs = { - auto_open = false - }, - }, - 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, +return { + { "hrsh7th/cmp-nvim-lsp" }, + { "hrsh7th/cmp-buffer" }, + { "hrsh7th/cmp-path" }, + { "hrsh7th/cmp-cmdline" }, + { "hrsh7th/cmp-nvim-lsp-signature-help" }, + { "hrsh7th/cmp-nvim-lua" }, + { "saadparwaiz1/cmp_luasnip" }, + { + "L3MON4D3/LuaSnip", + version = "v2.*", + build = "make install_jsregexp" }, - window = { - completion = cmp.config.window.bordered(), - documentation = cmp.config.window.bordered(), + { "rafamadriz/friendly-snippets" }, + { + "petertriho/cmp-git", + dependencies = "nvim-lua/plenary.nvim" }, - 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() + { "micangl/cmp-vimtex" }, + { + "hrsh7th/nvim-cmp", + config = function() + 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 - 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' }, - { name = 'vimtex' }, - }), -} --- 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(), -}) + -- 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 { + view = { + docs = { + auto_open = false + }, + }, + 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' }, + { name = 'vimtex' }, + }), + } --- 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:]].*]=] } } - } -}) + -- 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 cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). -cmp.setup.cmdline(':', { - mapping = cmp.mapping.preset.cmdline(), - sources = cmp.config.sources({ - { name = 'path' } - }, { - { name = 'cmdline' } - }) -}) + -- 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:]].*]=] } } + } + }) --- 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() -) + -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). + cmp.setup.cmdline(':', { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ + { name = 'path' } + }, { + { name = 'cmdline' } + }) + }) --- lazy loading to get in memory snippets of languages you use -require("luasnip/loaders/from_vscode").lazy_load() + -- 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() + ) -vim.diagnostic.config({ - virtual_text = false, - signs = true, - underline = false, - update_in_insert = true, - severity_sort = false, - float = { - source = true, + -- 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, + }, + }) + end, }, -}) +} |