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
This commit is contained in:
2026-07-16 11:45:07 +08:00
commit 8ad2067a64
22 changed files with 1527 additions and 0 deletions
+126
View File
@@ -0,0 +1,126 @@
-- =============================================================================
-- 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
+55
View File
@@ -0,0 +1,55 @@
-- =============================================================================
-- lazy.lua — 插件管理器初始化
-- =============================================================================
-- 【来源】从原 init.lua 提取。
-- 【修改】🔧 install.colorscheme 改为 tokyonight(你的主题);
-- 🔧 添加 ui.border = "rounded" 统一圆角;
-- 🔧 添加 performance.rtp 禁用内置插件提升启动速度。
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.uv.fs_stat(lazypath) then
vim.fn.system({
"git", "clone", "--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
spec = {
{ import = "plugins" },
},
-- 🔧 修改:安装时尝试加载你的主题
install = {
colorscheme = { "tokyonight", "habamax" },
},
-- 🔧 修改:关闭自动检查更新(你的原设置),但保留手动 :Lazy check
checker = {
enabled = false,
notify = false,
},
-- 🔧 修改:统一 UI 圆角边框
ui = {
border = "rounded",
},
-- ✅ 新增:禁用内置插件提升启动速度
performance = {
rtp = {
disabled_plugins = {
"gzip",
"matchit",
"matchparen",
"netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})
+91
View File
@@ -0,0 +1,91 @@
-- =============================================================================
-- options.lua — 编辑器基础选项
-- =============================================================================
-- 【来源】从原 init.lua 提取,补充了参考配置中缺失的选项。
-- 【新增项】已用 ✅ 标注,【修改项】已用 🔧 标注。
local opt = vim.opt
-- ─────────────────────────────────────────────
-- 行号
-- ─────────────────────────────────────────────
opt.number = true -- 当前行绝对行号
opt.relativenumber = true -- 相对行号(保留你的设置,方便 5j/5k 跳转)
-- ─────────────────────────────────────────────
-- 缩进
-- ─────────────────────────────────────────────
opt.tabstop = 4 -- Tab 宽度 4(保留你的设置,适配 C/C++)
opt.shiftwidth = 4 -- 缩进宽度 4
opt.expandtab = true -- Tab 转空格
opt.autoindent = true -- ✅ 新增:新行继承上一行缩进
opt.smartindent = true -- 智能缩进
-- ─────────────────────────────────────────────
-- 搜索
-- ─────────────────────────────────────────────
opt.ignorecase = true -- 搜索忽略大小写
opt.smartcase = true -- 含大写字母时区分大小写
opt.hlsearch = true -- ✅ 新增:高亮搜索匹配
opt.incsearch = true -- ✅ 新增:实时预览搜索
-- ─────────────────────────────────────────────
-- 显示 & 界面
-- ─────────────────────────────────────────────
opt.termguicolors = true -- 真彩色
opt.cursorline = true -- 高亮当前行
opt.signcolumn = "yes" -- 始终显示符号列
opt.wrap = false -- 不自动换行
opt.scrolloff = 8 -- ✅ 新增:光标距上下边缘保持 8 行
opt.sidescrolloff = 8 -- ✅ 新增:光标距左右边缘保持 8 列
opt.showmode = false -- ✅ 新增:隐藏 --INSERT--(状态栏会显示)
opt.pumheight = 10 -- 补全菜单最大高度
opt.winborder = "rounded" -- 全局浮动窗口圆角(保留你的设置)
-- ─────────────────────────────────────────────
-- 分割窗口
-- ─────────────────────────────────────────────
opt.splitright = true -- 垂直分割在右侧
opt.splitbelow = true -- 水平分割在下方
-- ─────────────────────────────────────────────
-- 文件 & 编码
-- ─────────────────────────────────────────────
opt.encoding = "utf-8" -- ✅ 新增:显式指定 UTF-8
opt.fileencoding = "utf-8" -- ✅ 新增
opt.swapfile = false -- ✅ 新增:关闭交换文件
opt.backup = false -- ✅ 新增:关闭备份文件
opt.undofile = true -- 持久化撤销
-- ─────────────────────────────────────────────
-- 鼠标 & 剪贴板
-- ─────────────────────────────────────────────
opt.mouse = "a" -- ✅ 新增:所有模式启用鼠标
opt.clipboard = "unnamedplus" -- 系统剪贴板
-- ─────────────────────────────────────────────
-- 性能
-- ─────────────────────────────────────────────
opt.updatetime = 250 -- LSP 悬浮提示触发延迟
opt.timeoutlen = 300 -- 快捷键序列超时
opt.wildmenu = true -- 命令行补全增强
opt.wildmode = "longest:full,full"
-- ─────────────────────────────────────────────
-- 补全
-- ─────────────────────────────────────────────
-- 🔧 修改:completeopt 改为 blink.cmp 推荐的配置
opt.completeopt = { "menuone", "noselect" }
-- ─────────────────────────────────────────────
-- 折叠(为 nvim-ufo 准备)
-- ─────────────────────────────────────────────
opt.foldlevel = 99
opt.foldlevelstart = 99 -- ✅ 新增:启动时展开所有折叠
opt.foldenable = true -- ✅ 新增:启用折叠
-- ─────────────────────────────────────────────
-- 其他
-- ─────────────────────────────────────────────
opt.conceallevel = 0 -- ✅ 新增:不隐藏特殊字符
opt.isfname:append("@-@") -- ✅ 新增:文件名识别 @ 符号