-- ============================================================================= -- keymaps.lua — 基础键位映射 -- ============================================================================= local keymap = vim.keymap.set -- Leader 键 vim.g.mapleader = " " vim.g.maplocalleader = " " -- 编辑器操作 keymap("n", "w", "w", { desc = "保存" }) -- 关闭当前 buffer / 窗口(VSCode 风格) -- - quickfix 窗口:cclose(cmake-tools 输出窗口) -- - 普通文件:统计文件 buffer 数量 -- - 只剩 1 个文件 buffer → 退出 nvim(不留下 "no name" 空白) -- - 多个文件 buffer → Bdelete 关闭当前标签 -- - 其他特殊 buffer(终端等):直接关闭窗口 keymap("n", "q", function() local bt = vim.bo.buftype local ft = vim.bo.filetype if bt == "quickfix" then vim.cmd("cclose") return end if bt ~= "" then vim.cmd("close") return end -- 统计文件 buffer 数量(排除 nvim-tree/dashboard/quickfix/terminal 等) local file_bufs = 0 for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do if vim.api.nvim_buf_is_loaded(bufnr) then local b = vim.bo[bufnr] if b.buftype == "" and b.filetype ~= "" then file_bufs = file_bufs + 1 end end end if file_bufs <= 1 then vim.cmd("qa") else vim.cmd("Bdelete") end end, { desc = "关闭当前 buffer/窗口" }) keymap("n", "/", "noh", { desc = "清除搜索高亮" }) -- 窗口导航 keymap("n", "", "h", { desc = "跳到左边窗口" }) keymap("n", "", "j", { desc = "跳到下面窗口" }) keymap("n", "", "k", { desc = "跳到上面窗口" }) keymap("n", "", "l", { desc = "跳到右边窗口" }) -- 窗口操作 keymap("n", "sv", "vsplit", { desc = "垂直分屏" }) keymap("n", "sh", "split", { desc = "水平分屏" }) keymap("n", "sc", "close", { desc = "关闭窗口" }) -- Buffer 导航 keymap("n", "", "bnext", { desc = "下一个 buffer" }) keymap("n", "", "bprevious", { desc = "上一个 buffer" }) -- 文件树 keymap("n", "e", "NvimTreeToggle", { desc = "文件树" }) -- 终端 keymap("n", "", "ToggleTerm", { desc = "终端" }) keymap("t", "", "ToggleTerm", { desc = "终端" })