vim.g.mapleader = " " vim.g.maplocalleader = " " local map = vim.api.nvim_set_keymap -- 复用 opt 参数 local opt = {noremap = true, silent = true } -- 取消 s 默认功能 map("n", "s", "", opt) -- windows 分屏快捷键 map("n", "sv", ":vsp", opt) map("n", "sh", ":sp", opt) -- 关闭当前 map("n", "sc", "c", opt) -- 关闭其他 map("n", "so", "o", opt) -- Alt + hjkl 窗口之间跳转 map("n", "", "h", opt) map("n", "", "j", opt) map("n", "", "k", opt) map("n", "", "l", opt) -- 左右比例控制 map("n", "", ":vertical resize -2", opt) map("n", "", ":vertical resize +2", opt) map("n", "s,", ":vertical resize -20", opt) map("n", "s.", ":vertical resize +20", opt) -- 上下比例 map("n", "sj", ":resize +10", opt) map("n", "sk", ":resize -10", opt) map("n", "", ":resize +2", opt) map("n", "", ":resize -2", opt) -- 等比例 map("n", "s=", "=", opt) -- Terminal相关 map("n", "t", ":sp | terminal", opt) map("n", "vt", ":vsp | terminal", opt) map("t", "", "", opt) map("t", "", [[ h ]], opt) map("t", "", [[ j ]], opt) map("t", "", [[ k ]], opt) map("t", "", [[ l ]], opt) -- visual模式下缩进代码 map("v", "<", "", ">gv", opt) -- 上下移动选中文本 map("v", "J", ":move '>+1gv-gv", opt) map("v", "K", ":move '<-2gv-gv", opt) -- 上下滚动浏览 map("n", "", "4j", opt) map("n", "", "4k", opt) -- ctrl u / ctrl + d 只移动9行,默认移动半屏 map("n", "", "9k", opt) map("n", "", "9j", opt) -- 在visual 模式里粘贴不要复制 map("v", "p", '"_dP', opt) -- 退出 map("n", "q", ":q", opt) map("n", "qq", ":q!", opt) map("n", "Q", ":qa!", opt) -- insert 模式下,跳到行首行尾 map("i", "", "I", opt) map("i", "", "A", opt) -- bufferline -- 左右Tab切换 map("n", "", ":BufferLineCyclePrev", opt) map("n", "", ":BufferLineCycleNext", opt) -- 关闭 --"moll/vim-bbye" map("n", "", ":Bdelete!", opt) map("n", "bl", ":BufferLineCloseRight", opt) map("n", "bh", ":BufferLineCloseLeft", opt) map("n", "bc", ":BufferLinePickClose", opt) -- Telescope -- 查找文件 map("n", "", ":Telescope find_files", opt) -- 全局搜索 map("n", "", ":Telescope live_grep", opt) -- 插件快捷键 local pluginKeys = {} -- nvim-tree -- alt + m 键打开关闭tree map("n", "", ":NvimTreeToggle", opt) -- 列表快捷键 pluginKeys.nvimTreeList = { -- 打开文件或文件夹 { key = {"", "o", "<2-LeftMouse>"}, action = "edit" }, -- 分屏打开文件 { key = "v", action = "vsplit" }, { key = "h", action = "split" }, -- 显示隐藏文件 { key = "i", action = "toggle_custom" }, -- 对应 filters 中的 custom (node_modules) { key = ".", action = "toggle_dotfiles" }, -- Hide (dotfiles) -- 文件操作 { key = "", action = "refresh" }, { key = "a", action = "create" }, { key = "d", action = "remove" }, { key = "r", action = "rename" }, { key = "x", action = "cut" }, { key = "c", action = "copy" }, { key = "p", action = "paste" }, { key = "s", action = "system_open" }, } -- Telescope 列表中 插入模式快捷键 pluginKeys.telescopeList = { i = { -- 上下移动 [""] = "move_selection_next", [""] = "move_selection_previous", [""] = "move_selection_next", [""] = "move_selection_previous", -- 历史记录 [""] = "cycle_history_next", [""] = "cycle_history_prev", -- 关闭窗口 [""] = "close", -- 预览窗口上下滚动 [""] = "preview_scrolling_up", [""] = "preview_scrolling_down", }, } -- lsp 回调函数快捷键设置 pluginKeys.mapLSP = function(mapbuf) -- rename mapbuf("n", "rn", "lua vim.lsp.buf.rename()", opt) -- code action mapbuf("n", "ca", "lua vim.lsp.buf.code_action()", opt) -- go xx mapbuf("n", "gd", "lua vim.lsp.buf.definition()", opt) mapbuf("n", "gh", "lua vim.lsp.buf.hover()", opt) mapbuf("n", "gD", "lua vim.lsp.buf.declaration()", opt) mapbuf("n", "gi", "lua vim.lsp.buf.implementation()", opt) mapbuf("n", "gr", "lua vim.lsp.buf.references()", opt) -- diagnostic mapbuf("n", "gp", "lua vim.diagnostic.open_float()", opt) mapbuf("n", "gk", "lua vim.diagnostic.goto_prev()", opt) mapbuf("n", "gj", "lua vim.diagnostic.goto_next()", opt) mapbuf("n", "f", "lua vim.lsp.buf.formatting()", opt) -- 没用到 -- mapbuf('n', 'q', 'lua vim.diagnostic.setloclist()', opt) -- mapbuf("n", "", "lua vim.lsp.buf.signature_help()", opt) -- mapbuf('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opt) -- mapbuf('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opt) -- mapbuf('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opt) -- mapbuf('n', 'D', 'lua vim.lsp.buf.type_definition()', opt) end pluginKeys.cmp = function(cmp) return { -- 出现补全 [""] = cmp.mapping(cmp.mapping.complete(), {"i", "c"}), -- 取消 [""] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close() }), -- 上一个 [""] = cmp.mapping.select_prev_item(), -- 下一个 [""] = cmp.mapping.select_next_item(), -- 确认 [""] = cmp.mapping.confirm({ select = true, behavior = cmp.ConfirmBehavior.Replace }), -- 如果窗口内容太多,可以滚动 [""] = cmp.mapping(cmp.mapping.scroll_docs(-4), {"i", "c"}), [""] = cmp.mapping(cmp.mapping.scroll_docs(4), {"i", "c"}), -- Super Tab [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif vim.fn["vsnip#available"](1) == 1 then feedkey("(vsnip-expand-or-jump)", "") else fallback() -- The fallback function sends a already mapped key. In this case, it's probably ``. end end, {"i", "s"}), [""] = cmp.mapping(function() if cmp.visible() then cmp.select_prev_item() elseif vim.fn["vsnip#jumpable"](-1) == 1 then feedkey("(vsnip-jump-prev)", "") end end, {"i", "s"}) -- end of super Tab } end return pluginKeys