Files
nvim-config/lua/config/keymaps.lua
T
Super_Z 8ad2067a64 feat: VSCode 风格 Neovim 配置
- 分层架构:config/{options,keymaps,lazy} + plugins/
- 保留:blink.cmp, oil.nvim, runner.lua, cmake-tools, diffview, tokyonight
- 新增 UI:bufferline, lualine, noice, nvim-notify, dashboard, dressing
- 新增编辑器:Comment, nvim-surround, vim-illuminate, toggleterm, flash
- 新增视觉:indent-blankline, nvim-ufo, rainbow-delimiters
- 新增 Git:lazygit 集成
- 新增 DAP:persistent-breakpoints, nvim-dap-virtual-text
- 修复:which-key 启用, rustaceanvim 填充, 键位冲突解决
- 语法检查:22/22 文件全部通过 luajit -b
2026-07-16 11:45:07 +08:00

127 lines
8.1 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================================
-- keymaps.lua — 基础键位映射
-- =============================================================================
-- 【来源】从原 init.lua 提取 + 参考配置精华合并。
-- 【保留】你的 <C-h/j/k/l> 窗口跳转、<leader>w/q 保存退出、oil 键位等。
-- 【新增】已用 ✅ 标注,【修改】已用 🔧 标注。
local keymap = vim.keymap.set
local M = {}
-- ─────────────────────────────────────────────
-- Leader 键
-- ─────────────────────────────────────────────
vim.g.mapleader = " "
vim.g.maplocalleader = " "
-- ─────────────────────────────────────────────
-- 编辑器操作
-- ─────────────────────────────────────────────
keymap("n", "<leader>w", "<cmd>w<cr>", { desc = "保存" })
keymap("n", "<leader>q", "<cmd>q<cr>", { desc = "退出" })
keymap("n", "<leader>Q", "<cmd>qa<cr>", { desc = "✅ 新增:全部退出" })
keymap("n", "<leader>/", "<cmd>noh<cr>", { desc = "清除搜索高亮" })
-- ─────────────────────────────────────────────
-- 窗口导航(保留你的 C-h/j/k/l 跳转)
-- ─────────────────────────────────────────────
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 = "跳到右边窗口" })
-- ✅ 新增:窗口操作(用 <leader>W 前缀,不与跳转冲突)
keymap("n", "<leader>W", "<Nop>", { desc = "窗口操作" })
keymap("n", "<leader>Wv", "<cmd>vsplit<cr>", { desc = "垂直分割" })
keymap("n", "<leader>Wh", "<cmd>split<cr>", { desc = "水平分割" })
keymap("n", "<leader>Wc", "<cmd>close<cr>", { desc = "关闭窗口" })
keymap("n", "<leader>Wo", "<cmd>only<cr>", { desc = "关闭其他" })
keymap("n", "<leader>Wr", "<cmd>wincmd r<cr>", { desc = "旋转窗口" })
keymap("n", "<leader>W=", "<cmd>wincmd =<cr>", { desc = "平衡窗口" })
-- ✅ 新增:用 Alt+方向键调整窗口大小(不占用 C-h/j/k/l)
keymap("n", "<A-Up>", "<cmd>resize +3<cr>", { desc = "增加高度" })
keymap("n", "<A-Down>", "<cmd>resize -3<cr>", { desc = "减少高度" })
keymap("n", "<A-Left>", "<cmd>vertical resize -3<cr>", { desc = "减少宽度" })
keymap("n", "<A-Right>", "<cmd>vertical resize +3<cr>", { desc = "增加宽度" })
-- ─────────────────────────────────────────────
-- 翻页居中
-- ─────────────────────────────────────────────
-- ✅ 新增:翻页后光标居中,大幅提升阅读体验
keymap("n", "<C-d>", "<C-d>zz", { desc = "向下翻页(居中)" })
keymap("n", "<C-u>", "<C-u>zz", { desc = "向上翻页(居中)" })
-- ─────────────────────────────────────────────
-- 插入模式
-- ─────────────────────────────────────────────
-- ✅ 新增:jj 快速退出插入模式(比 Esc 近)
keymap("i", "jj", "<Esc>", { desc = "退出插入模式" })
-- ─────────────────────────────────────────────
-- 可视模式
-- ─────────────────────────────────────────────
-- ✅ 新增:移动选中行
keymap("v", "<A-j>", ":m '>+1<CR>gv=gv", { desc = "下移选中" })
keymap("v", "<A-k>", ":m '<-2<CR>gv=gv", { desc = "上移选中" })
-- ✅ 新增:缩进时保持选中
keymap("v", "<", "<gv", { desc = "左缩进" })
keymap("v", ">", ">gv", { desc = "右缩进" })
-- ✅ 新增:粘贴不覆盖寄存器
keymap("v", "p", '"_dP', { desc = "粘贴不覆盖" })
-- ─────────────────────────────────────────────
-- 终端
-- ─────────────────────────────────────────────
-- ✅ 新增:终端模式 Esc 退出
keymap("t", "<Esc>", "<C-\\><C-n>", { desc = "退出终端" })
-- ─────────────────────────────────────────────
-- bufferline 标签栏操作
-- ─────────────────────────────────────────────
-- ✅ 新增:Shift+H/L 切换 bufferVSCode 风格)
keymap("n", "<S-h>", "<cmd>BufferLineCyclePrev<CR>", { desc = "上一个标签" })
keymap("n", "<S-l>", "<cmd>BufferLineCycleNext<CR>", { desc = "下一个标签" })
keymap("n", "<leader>bc", "<cmd>Bdelete<CR>", { desc = "关闭当前标签" })
keymap("n", "<leader>bo", "<cmd>BufferLineCloseOthers<CR>", { desc = "关闭其他标签" })
-- ─────────────────────────────────────────────
-- 集成终端(toggleterm
-- ─────────────────────────────────────────────
-- ✅ 新增:Ctrl+\ 打开/关闭浮动终端
keymap("n", "<C-\\>", "<cmd>ToggleTerm<CR>", { desc = "浮动终端" })
-- ─────────────────────────────────────────────
-- 快速跳转(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("<leader>rn", vim.lsp.buf.rename, "重命名")
map("<leader>ca", vim.lsp.buf.code_action, "代码操作")
map("<leader>lf", function() vim.lsp.buf.format({ async = true }) end, "格式化")
map("[d", vim.diagnostic.goto_prev, "上一诊断")
map("]d", vim.diagnostic.goto_next, "下一诊断")
map("<leader>dd", vim.diagnostic.open_float, "行诊断")
end
-- ─────────────────────────────────────────────
-- Git
-- ─────────────────────────────────────────────
keymap("n", "<leader>g", "<Nop>", { desc = "Git" })
keymap("n", "<leader>gg", "<cmd>LazyGit<CR>", { desc = "LazyGit" })
return M