74 lines
2.4 KiB
Lua
74 lines
2.4 KiB
Lua
-- =============================================================================
|
||
-- keymaps.lua — 基础键位映射
|
||
-- =============================================================================
|
||
|
||
local keymap = vim.keymap.set
|
||
|
||
-- Leader 键
|
||
vim.g.mapleader = " "
|
||
vim.g.maplocalleader = " "
|
||
|
||
-- 编辑器操作
|
||
keymap("n", "<leader>w", "<cmd>w<cr>", { desc = "保存" })
|
||
|
||
-- 关闭当前 buffer / 窗口(VSCode 风格)
|
||
-- - quickfix 窗口:cclose(cmake-tools 输出窗口)
|
||
-- - 普通文件:统计文件 buffer 数量
|
||
-- - 只剩 1 个文件 buffer → 退出 nvim(不留下 "no name" 空白)
|
||
-- - 多个文件 buffer → Bdelete 关闭当前标签
|
||
-- - 其他特殊 buffer(终端等):直接关闭窗口
|
||
keymap("n", "<leader>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", "<leader>/", "<cmd>noh<cr>", { desc = "清除搜索高亮" })
|
||
|
||
-- 窗口导航
|
||
keymap("n", "<C-h>", "<C-w>h", { desc = "跳到左边窗口" })
|
||
keymap("n", "<C-j>", "<C-w>j", { desc = "跳到下面窗口" })
|
||
keymap("n", "<C-k>", "<C-w>k", { desc = "跳到上面窗口" })
|
||
keymap("n", "<C-l>", "<C-w>l", { desc = "跳到右边窗口" })
|
||
|
||
-- 窗口操作
|
||
keymap("n", "<leader>sv", "<cmd>vsplit<cr>", { desc = "垂直分屏" })
|
||
keymap("n", "<leader>sh", "<cmd>split<cr>", { desc = "水平分屏" })
|
||
keymap("n", "<leader>sc", "<cmd>close<cr>", { desc = "关闭窗口" })
|
||
|
||
-- Buffer 导航
|
||
keymap("n", "<S-h>", "<cmd>bnext<cr>", { desc = "下一个 buffer" })
|
||
keymap("n", "<S-l>", "<cmd>bprevious<cr>", { desc = "上一个 buffer" })
|
||
|
||
-- 文件树
|
||
keymap("n", "<leader>e", "<cmd>NvimTreeToggle<cr>", { desc = "文件树" })
|
||
|
||
-- 终端
|
||
keymap("n", "<c-`>", "<cmd>ToggleTerm<cr>", { desc = "终端" })
|
||
keymap("t", "<c-`>", "<cmd>ToggleTerm<cr>", { desc = "终端" }) |