-- ============================================================================= -- keymaps.lua — 基础键位映射 -- ============================================================================= -- 【来源】从原 init.lua 提取 + 参考配置精华合并。 -- 【保留】你的 窗口跳转、w/q 保存退出、oil 键位等。 -- 【新增】已用 ✅ 标注,【修改】已用 🔧 标注。 local keymap = vim.keymap.set local M = {} -- ───────────────────────────────────────────── -- Leader 键 -- ───────────────────────────────────────────── vim.g.mapleader = " " vim.g.maplocalleader = " " -- ───────────────────────────────────────────── -- 编辑器操作 -- ───────────────────────────────────────────── keymap("n", "w", "w", { desc = "保存" }) keymap("n", "q", "q", { desc = "退出" }) keymap("n", "Q", "qa", { desc = "✅ 新增:全部退出" }) keymap("n", "/", "noh", { desc = "清除搜索高亮" }) -- ───────────────────────────────────────────── -- 窗口导航(保留你的 C-h/j/k/l 跳转) -- ───────────────────────────────────────────── keymap("n", "", "h", { desc = "跳到左边窗口" }) keymap("n", "", "j", { desc = "跳到下面窗口" }) keymap("n", "", "k", { desc = "跳到上面窗口" }) keymap("n", "", "l", { desc = "跳到右边窗口" }) -- ✅ 新增:窗口操作(用 W 前缀,不与跳转冲突) keymap("n", "W", "", { desc = "窗口操作" }) keymap("n", "Wv", "vsplit", { desc = "垂直分割" }) keymap("n", "Wh", "split", { desc = "水平分割" }) keymap("n", "Wc", "close", { desc = "关闭窗口" }) keymap("n", "Wo", "only", { desc = "关闭其他" }) keymap("n", "Wr", "wincmd r", { desc = "旋转窗口" }) keymap("n", "W=", "wincmd =", { desc = "平衡窗口" }) -- ✅ 新增:用 Alt+方向键调整窗口大小(不占用 C-h/j/k/l) keymap("n", "", "resize +3", { desc = "增加高度" }) keymap("n", "", "resize -3", { desc = "减少高度" }) keymap("n", "", "vertical resize -3", { desc = "减少宽度" }) keymap("n", "", "vertical resize +3", { desc = "增加宽度" }) -- ───────────────────────────────────────────── -- 翻页居中 -- ───────────────────────────────────────────── -- ✅ 新增:翻页后光标居中,大幅提升阅读体验 keymap("n", "", "zz", { desc = "向下翻页(居中)" }) keymap("n", "", "zz", { desc = "向上翻页(居中)" }) -- ───────────────────────────────────────────── -- 插入模式 -- ───────────────────────────────────────────── -- ✅ 新增:jj 快速退出插入模式(比 Esc 近) keymap("i", "jj", "", { desc = "退出插入模式" }) -- ───────────────────────────────────────────── -- 可视模式 -- ───────────────────────────────────────────── -- ✅ 新增:移动选中行 keymap("v", "", ":m '>+1gv=gv", { desc = "下移选中" }) keymap("v", "", ":m '<-2gv=gv", { desc = "上移选中" }) -- ✅ 新增:缩进时保持选中 keymap("v", "<", "", ">gv", { desc = "右缩进" }) -- ✅ 新增:粘贴不覆盖寄存器 keymap("v", "p", '"_dP', { desc = "粘贴不覆盖" }) -- ───────────────────────────────────────────── -- 终端 -- ───────────────────────────────────────────── -- ✅ 新增:终端模式 Esc 退出 keymap("t", "", "", { desc = "退出终端" }) -- ───────────────────────────────────────────── -- bufferline 标签栏操作 -- ───────────────────────────────────────────── -- ✅ 新增:Shift+H/L 切换 buffer(VSCode 风格) keymap("n", "", "BufferLineCyclePrev", { desc = "上一个标签" }) keymap("n", "", "BufferLineCycleNext", { desc = "下一个标签" }) -- ✅ 新增:Ctrl+Tab / Ctrl+Shift+Tab 切换标签(VSCode 习惯) keymap("n", "", "BufferLineCycleNext", { desc = "下一个标签" }) keymap("n", "", "BufferLineCyclePrev", { desc = "上一个标签" }) keymap("n", "bc", "Bdelete", { desc = "关闭当前标签" }) keymap("n", "bo", "BufferLineCloseOthers", { desc = "关闭其他标签" }) -- ───────────────────────────────────────────── -- 集成终端(toggleterm) -- ───────────────────────────────────────────── -- ✅ 新增:集成终端键位由 toggleterm 插件自己的 keys 配置处理 -- 不在这里绑定,避免插件未加载时 ToggleTerm 命令不存在报错 -- ───────────────────────────────────────────── -- 快速跳转(flash.nvim) -- ───────────────────────────────────────────── -- ✅ 新增:s 键快速跳转 keymap({ "n", "x", "o" }, "s", function() require("flash").jump() end, { desc = "Flash 跳转" }) -- ───────────────────────────────────────────── -- LSP(基础键位,插件配置中会补充) -- ───────────────────────────────────────────── -- 🔧 修改:统一 LSP 键位到 on_attach,保留你的风格但增加更多功能 function M.lsp_on_attach(client, bufnr) local map = function(keys, func, desc) vim.keymap.set("n", keys, func, { buffer = bufnr, noremap = true, silent = true, desc = "LSP: " .. desc }) end map("K", vim.lsp.buf.hover, "悬浮文档") map("gd", vim.lsp.buf.definition, "跳转到定义") map("gr", vim.lsp.buf.references, "查找引用") map("rn", vim.lsp.buf.rename, "重命名") map("ca", vim.lsp.buf.code_action, "代码操作") map("lf", function() vim.lsp.buf.format({ async = true }) end, "格式化") map("[d", vim.diagnostic.goto_prev, "上一诊断") map("]d", vim.diagnostic.goto_next, "下一诊断") map("dd", vim.diagnostic.open_float, "行诊断") end -- ───────────────────────────────────────────── -- Git -- ───────────────────────────────────────────── keymap("n", "g", "", { desc = "Git" }) keymap("n", "gg", "LazyGit", { desc = "LazyGit" }) return M