# Neovim 配置 基于 Neovim 0.12+,lazy.nvim 管理插件,支持原生和 VSCode Neovim 双模式。 ## 目录结构 ``` init.lua # 入口:安装 lazy.nvim → keymaps → 分支判断 lua/ G.lua # 全局工具单例(vim API 别名 + 映射/命令/自动命令封装) keymap.lua # 基础快捷键 options.lua # vim.opt 基础设置 vsc.lua # VSCode Neovim 模式下的精简启动(仅编辑插件) plugs.lua # 插件聚合器(10 个模块) plugs/ nvim-lspconfig.lua # LSP 核心:7 个 server 注册 + LSP 快捷键 mason.lua # LSP server 自动安装(Mason) nvim-cmp.lua # 补全引擎(nvim-cmp + vsnip + lspkind + 命令行补全) treesitter.lua # 语法高亮 + 自动安装 parser symbols-outline.lua # 代码大纲侧边栏 winbar.lua # 顶部文件路径 + 函数标签 nvimtree.lua # 文件树 theme.lua # 主题(tokyonight)+ 状态栏(lualine)+ 标签栏(tabline) edit-plugs.lua # 编辑增强(fzf/surround/wildfire/多光标/对齐/Copilot/折叠/hop) dev.lua # 开发工具(colorizer/go.nvim/conda/toggleterm) lsp/ lua.lua # Lua LSP(LuaJIT + 全局变量声明) c.lua # C/C++ LSP(clangd)+ :R 编译运行 bash.lua # Bash LSP + :R 运行 go.lua # Go LSP(gopls)+ :R / :Rgin 运行 basedpyright.lua # Python LSP(basedpyright)+ :R 运行 yaml.lua # YAML LSP + GitHub Workflow schema json.lua # JSON LSP snippets/ # 代码片段(C/Go/JSON/Lua) ``` ## 启动流程 ``` G.lua → 克隆/定位 lazy.nvim → keymap.lua → 若 VSCode 环境 → vsc.lua(仅编辑插件) 若原生 Neovim → options.lua → lazy.setup(plugs.lua) ``` ## 插件总表(~28 个) | 分类 | 插件 | 用途 | |------|------|------| | LSP | nvim-lspconfig | LSP 客户端配置 | | LSP | Mason + mason-lspconfig | LSP server 自动下载 | | LSP | lua_ls, clangd, bashls, gopls, basedpyright, yamlls, jsonls | 7 种语言 LSP | | 补全 | nvim-cmp + cmp-nvim-lsp + cmp-buffer + cmp-path + cmp-cmdline | 补全引擎 | | 补全 | vim-vsnip + cmp-vsnip | 代码片段引擎 | | 补全 | lspkind-nvim | 补全图标 | | 语法 | nvim-treesitter | 语法高亮 + 缩进检测 | | 语法 | nvim-autopairs | 自动括号配对 | | 语法 | nvim-hlchunk | 括号层级和缩进色块 | | 主题 | tokyonight.nvim | 配色方案 | | UI | lualine.nvim | 状态栏 | | UI | tabline.nvim | 顶部标签栏 | | UI | winbar.nvim | 顶部文件名 + 函数路径 | | UI | nvim-tree.lua | 侧边文件树 | | UI | symbols-outline.nvim | 代码大纲 | | UI | colorizer | 颜色值可视化 | | 编辑 | nvim-fzf | 模糊搜索 | | 编辑 | vim-surround | 环绕字符操作(cs/ds/ys) | | 编辑 | wildfire.vim | 选区自动扩大/缩小 | | 编辑 | vim-multiple-cursors | 多光标编辑 | | 编辑 | vim-easy-align | 对齐排版 | | 编辑 | hop.nvim | 快速跳转(替代 f/F/t/T) | | 编辑 | nvim-ufo | 现代折叠(treesitter 驱动) | | AI | copilot.vim | GitHub Copilot 行内补全 | | 语言 | go.nvim | Go 开发增强(test/coverage 等) | | 语言 | nvim-conda | Conda 环境切换 | | 终端 | toggleterm.nvim | 浮层终端 | ## 快捷键速查 ### 基础操作 | 键 | 模式 | 功能 | |----|------|------| | `nh` | n | 清除搜索高亮 | | `rp` | n | 全局替换 `:%s/` | | `y` / `p` / `v` | n | 全文件复制/粘贴/全选 | | `` / `` | n | 切换左右标签页 | | `` | n | 窗口间跳转 | | `` / `` | n | 关闭窗口 / 强制关闭 | | `` | n | sudo 强制保存 | | `` | v | 复制到系统剪切板 | | `` | n | 文件树开关 | | `` | n | 代码大纲开关 | | `` | n/i | 终端开关 | | `` | n | Reasonix AI:自适应分屏(横屏→下方,竖屏→右侧) | | `` | n | 调整窗口大小 | ### LSP | 键 | 模式 | 功能 | |----|------|------| | `gd` | n | 跳转到定义 | | `gh` | n | 悬浮文档 | | `gD` | n | 跳转到声明 | | `gi` | n | 跳转到实现 | | `gr` | n | 查找引用 | | `` | n | 重命名符号 | | `` | n | 代码格式化 | ### 语言运行 `:R` | 语言 | 命令 | |------|------| | C/C++ | 编译 → 运行 → 删二进制 | | Bash | `sh %` | | Go | `go run %`;`:Rgin` 运行 `main.go` | | Python | `python3 %` | ### 补全(插入模式) | 键 | 功能 | |----|------| | `` / `` | 选择补全项 / snippet 占位跳转 | | ``(未选择时) | 换行 | | ``(选择后) | 确认补全 | | `Tab` | Copilot 接受建议 | ### 命令栏 / 搜索栏补全 | 键 | 功能 | |----|------| | `Tab` / `S-Tab` | 选择补全项 | | ``(未选择时) | 直接执行命令/搜索 | | ``(选择后) | 确认补全 | ### 编辑 | 键 | 模式 | 功能 | |----|------|------| | `f` / `F` / `t` / `T` | n | hop 行内跳转(覆盖原生) | | `` | n | hop 双字符跳转 | | `ga` / `=` | v | EasyAlign 对齐 | | `gc` / `gcc` | n | 注释切换(Neovim 0.12 内置) | | `zc` / `zo` / `za` / `zR` | n | 折叠(ufo) | ### 文件树内 | 键 | 功能 | |----|------| | `v` | 垂直分屏打开 | | `s` | 水平分屏打开 | ## LSP 说明 - 使用 Neovim 0.11+ 新 API:`vim.lsp.config` / `vim.lsp.enable` - `capabilities` 由 `cmp_nvim_lsp` 统一在 `nvim-lspconfig.lua` 注入,各语言文件不重复 require - `basedpyright` 替代了 `pyright`(类型检查更强) - Mason 自动安装:bashls、lua_ls、jsonls、yamlls(basedpyright 需手动装) - Treesitter 关闭了 txt parser,禁用了 Go(恢复中由 go.nvim 处理) ## 安装 ```bash # 克隆到 Neovim 配置目录 git clone https://git.qyhhh.top/newbie/nvim.git ~/.config/nvim # 首次启动会自动安装 lazy.nvim 及全部插件 nvim ``` ## 许可 MIT