diff --git a/lua/lazyvim/plugins/coding.lua b/lua/lazyvim/plugins/coding.lua index d1fc5a22..e73d904e 100644 --- a/lua/lazyvim/plugins/coding.lua +++ b/lua/lazyvim/plugins/coding.lua @@ -23,19 +23,19 @@ return { vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true }) local cmp = require("cmp") local defaults = require("cmp.config.default")() + local auto_select = true return { auto_brackets = {}, -- configure any filetype to auto add brackets completion = { - completeopt = "menu,menuone,noinsert", + completeopt = "menu,menuone,noinsert" .. (auto_select and "" or ",noselect"), }, + preselect = auto_select and cmp.PreselectMode.Item or cmp.PreselectMode.None, mapping = cmp.mapping.preset.insert({ - [""] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }), - [""] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }), [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), - [""] = cmp.mapping.abort(), - [""] = LazyVim.cmp.confirm(), + [""] = LazyVim.cmp.confirm({ select = auto_select }), + [""] = LazyVim.cmp.confirm({ select = true }), [""] = LazyVim.cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. [""] = function(fallback) cmp.abort() @@ -50,7 +50,7 @@ return { }), formatting = { format = function(_, item) - local icons = require("lazyvim.config").icons.kinds + local icons = LazyVim.config.icons.kinds if icons[item.kind] then item.kind = icons[item.kind] .. item.kind end @@ -65,32 +65,7 @@ return { sorting = defaults.sorting, } end, - ---@param opts cmp.ConfigSchema | {auto_brackets?: string[]} - config = function(_, opts) - for _, source in ipairs(opts.sources) do - source.group_index = source.group_index or 1 - end - - local parse = require("cmp.utils.snippet").parse - require("cmp.utils.snippet").parse = function(input) - local ok, ret = pcall(parse, input) - if ok then - return ret - end - return LazyVim.cmp.snippet_preview(input) - end - - local cmp = require("cmp") - cmp.setup(opts) - cmp.event:on("confirm_done", function(event) - if vim.tbl_contains(opts.auto_brackets or {}, vim.bo.filetype) then - LazyVim.cmp.auto_brackets(event.entry) - end - end) - cmp.event:on("menu_opened", function(event) - LazyVim.cmp.add_missing_snippet_docs(event.window) - end) - end, + main = "lazyvim.util.cmp", }, -- snippets diff --git a/lua/lazyvim/util/cmp.lua b/lua/lazyvim/util/cmp.lua index 6a0e0b13..242d5960 100644 --- a/lua/lazyvim/util/cmp.lua +++ b/lua/lazyvim/util/cmp.lua @@ -128,4 +128,31 @@ function M.expand(snippet) end end +---@param opts cmp.ConfigSchema | {auto_brackets?: string[]} +function M.setup(opts) + for _, source in ipairs(opts.sources) do + source.group_index = source.group_index or 1 + end + + local parse = require("cmp.utils.snippet").parse + require("cmp.utils.snippet").parse = function(input) + local ok, ret = pcall(parse, input) + if ok then + return ret + end + return LazyVim.cmp.snippet_preview(input) + end + + local cmp = require("cmp") + cmp.setup(opts) + cmp.event:on("confirm_done", function(event) + if vim.tbl_contains(opts.auto_brackets or {}, vim.bo.filetype) then + LazyVim.cmp.auto_brackets(event.entry) + end + end) + cmp.event:on("menu_opened", function(event) + LazyVim.cmp.add_missing_snippet_docs(event.window) + end) +end + return M