- opts.completion = vim.tbl_extend("force", opts.completion, {
- completeopt = "menu,menuone,noselect",
- })
- --TODO: review if I want to keep any of LazyVim's mappings
- opts.mapping = vim.tbl_extend("force", opts.mapping, {
- ["<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" }),
- })
+ -- surround
+ {
+ "echasnovski/mini.surround",
+ keys = function()
+ -- HACK: use function to disable merging with LazyVim's keys definition
+ return {
+ { "ys", desc = "Add surrounding", "n" },
+ { "S", desc = "Add surrounding", "x" },
+ { "ds", desc = "Delete surrounding" },
+ { "cs", desc = "Change surrounding" },
+ { "yss", "ys_", remap = true },
+ }
+ end,
+ opts = {
+ mappings = {
+ -- TODO: this is tpope/surround like, but should consider using vim-sandwich mappings
+ -- see: :h MiniSurround-vim-surround-config
+ add = "ys",
+ delete = "ds",
+ find = "",
+ find_left = "",
+ highlight = "",
+ replace = "cs",
+ update_n_lines = "",
+ },
+ },
+ config = function(_, opts)
+ require("mini.surround").setup(opts)
+ -- remap visual
+ vim.keymap.del("x", "ys", { silent = true })
+ vim.keymap.set("x", "S", [[:<C-u>lua MiniSurround.add('visual')<CR>]], { silent = true })