-- Set completeopt to have a better completion experience -- :help completeopt -- menuone: popup even when there's only one match -- noinsert: Do not insert text until a selection is made -- noselect: Do not select, force to select one from the menu -- shortness: avoid showing extra messages when using completion -- updatetime: set updatetime for CursorHold vim.opt.completeopt = {'menuone', 'noselect', 'noinsert'} vim.opt.shortmess = vim.opt.shortmess + {c = true} vim.api.nvim_set_option('updatetime', 300) -- Fixed column for diagnostics to appear -- Show autodiagnostic popup on cursor hover_range -- Goto previous / next diagnostic warning / error -- Show inlay_hints more frequently vim.cmd([[ set signcolumn=yes autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false }) ]]) vim.opt.spell = true vim.opt.spelllang = {'en_us'} -- Completion Plugin Setup local cmp = require 'cmp' cmp.setup({ -- Enable LSP snippets snippet = {expand = function(args) vim.fn["vsnip#anonymous"](args.body) end}, -- = CTRL -- = SHIFT mapping = { [''] = cmp.mapping.select_prev_item(), [''] = cmp.mapping.select_next_item(), -- Add tab support [''] = cmp.mapping.select_prev_item(), [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.close(), [''] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true }) }, -- Installed sources: sources = { {name = 'path'}, -- file paths {name = 'nvim_lsp', keyword_length = 3}, -- from language server {name = 'nvim_lsp_signature_help'}, -- display function signatures with current parameter emphasized {name = 'nvim_lua', keyword_length = 2}, -- complete neovim's Lua runtime API such vim.lsp.* {name = 'buffer', keyword_length = 2}, -- source current buffer {name = 'vsnip', keyword_length = 2}, -- nvim-cmp source for vim-vsnip {name = 'calc'}, -- source for math calculation { name = 'spell', option = { keep_all_entries = false, enable_in_context = function() return true end } }, {name = 'conventionalcommits', keyword_length = 1 }, }, window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered() }, formatting = { fields = {'menu', 'abbr', 'kind'}, format = function(entry, item) local menu_icon = { nvim_lsp = 'λ', vsnip = '⋗', buffer = 'Ω', path = '📁', spell = '💬', calc = '√', } item.menu = menu_icon[entry.source.name] return item end } })