From 869e6ed0425cb0303e41cb9c70eb4c8025acd498 Mon Sep 17 00:00:00 2001 From: js0ny Date: Wed, 5 Mar 2025 12:38:30 +0000 Subject: [PATCH] fix(nvim): Use Tab, S-Tab to navigate between cursor positions --- tools/nvim/lua/keymaps/cmp_map.lua | 13 ------ tools/nvim/lua/keymaps/init.lua | 2 - tools/nvim/lua/plugins/mod/nvim-cmp.lua | 57 +++++++++++++++++++------ 3 files changed, 44 insertions(+), 28 deletions(-) delete mode 100644 tools/nvim/lua/keymaps/cmp_map.lua diff --git a/tools/nvim/lua/keymaps/cmp_map.lua b/tools/nvim/lua/keymaps/cmp_map.lua deleted file mode 100644 index 8fbb5fc..0000000 --- a/tools/nvim/lua/keymaps/cmp_map.lua +++ /dev/null @@ -1,13 +0,0 @@ ---- `map` default for `cmp.mapping` -local map = function(map) - return { - { keys = "", cmd = map.select_next_item(), opts = { desc = "Select next completion item" } }, - { keys = "", cmd = map.select_prev_item(), opts = { desc = "Select previous completion item" } }, - { keys = "", cmd = map.confirm({ select = true }), opts = { desc = "Confirm completion" } }, - { keys = "", cmd = map.confirm({ select = true }), opts = { desc = "Confirm completion" } }, - { keys = "", cmd = map.complete(), opts = { desc = "Trigger completion" } }, - { keys = "", cmd = map.abort(), opts = { desc = "Abort completion" } }, - } -end - -return map diff --git a/tools/nvim/lua/keymaps/init.lua b/tools/nvim/lua/keymaps/init.lua index 28907b6..e33d7d8 100644 --- a/tools/nvim/lua/keymaps/init.lua +++ b/tools/nvim/lua/keymaps/init.lua @@ -21,8 +21,6 @@ utils.set_keymaps(keymaps_modifier) M.nvim_tree_keymaps = require("keymaps.nvim-tree").plugin -M.cmp_nvim_keymaps = require("keymaps.cmp_map") - -- local function set_markdown_keymaps(bufnr) -- local opts = { noremap = true, silent = true, buffer = bufnr } -- vim.keymap.set("v", "`", 'c`"`', opts) diff --git a/tools/nvim/lua/plugins/mod/nvim-cmp.lua b/tools/nvim/lua/plugins/mod/nvim-cmp.lua index e217f49..8cabbf5 100644 --- a/tools/nvim/lua/plugins/mod/nvim-cmp.lua +++ b/tools/nvim/lua/plugins/mod/nvim-cmp.lua @@ -23,6 +23,7 @@ return { local lspconfig = require("lspconfig") local capabilities = require("cmp_nvim_lsp").default_capabilities() local servers_module = require("config.servers") + local luasnip = require("luasnip") local servers = servers_module.servers local servers_config = servers_module.server_config -- 默认 LSP 配置 @@ -30,8 +31,8 @@ return { capabilities = capabilities, } - local raw_keymaps = require("keymaps").cmp_nvim_keymaps(cmp.mapping) - local mapped = set_keymaps(raw_keymaps) + -- local raw_keymaps = require("keymaps.cmp_map")(cmp.mapping) -- require("keymaps").cmp_nvim_keymaps(cmp.mapping) + -- local mapped = set_keymaps(raw_keymaps) local kind_icons = require("config.icons").lsp_kind -- 配置 nvim-cmp cmp.setup({ @@ -46,7 +47,47 @@ return { require("luasnip").lsp_expand(args.body) end, }, - mapping = cmp.mapping.preset.insert(mapped), + mapping = { + -- cmp.mapping.preset.insert(mapped), + [""] = cmp.mapping.select_next_item(), + [""] = cmp.mapping.select_prev_item(), + [""] = cmp.mapping.confirm({ select = true }), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + if luasnip.expandable() then + luasnip.expand() + else + cmp.confirm({ + select = true, + }) + end + else + fallback() + end + end), + + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.confirm({ select = true }) + elseif luasnip.locally_jumpable(1) then + luasnip.jump(1) + else + fallback() + end + end, { "i", "s" }), + + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }, -- cmp.mapping.preset.insert(mapped), sources = cmp.config.sources({ { name = "copilot", priority = 10 }, { name = "nvim_lsp" }, @@ -58,15 +99,6 @@ return { }), }) - -- 配置 cmdline 模式 - -- cmp.setup.cmdline(":", { - -- mapping = cmp.mapping.preset.cmdline(), - -- sources = { - -- { name = "cmdline" }, - -- }, - -- }) - - -- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline({ "/", "?" }, { mapping = cmp.mapping.preset.cmdline(), sources = { @@ -74,7 +106,6 @@ return { }, }) - -- 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({