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 |
浮层终端 |
快捷键速查
基础操作
| 键 |
模式 |
功能 |
<leader>nh |
n |
清除搜索高亮 |
<leader>rp |
n |
全局替换 :%s/ |
<leader>y / p / v |
n |
全文件复制/粘贴/全选 |
<A-h> / <A-l> |
n |
切换左右标签页 |
<c-j/h/k/l> |
n |
窗口间跳转 |
<c-c> / <c-q> |
n |
关闭窗口 / 强制关闭 |
<c-S> |
n |
sudo 强制保存 |
<cs-y> |
v |
复制到系统剪切板 |
<c-e> |
n |
文件树开关 |
<cs-o> |
n |
代码大纲开关 |
<c-t> |
n/i |
终端开关 |
<up/down/left/right> |
n |
调整窗口大小 |
LSP
| 键 |
模式 |
功能 |
gd |
n |
跳转到定义 |
gh |
n |
悬浮文档 |
gD |
n |
跳转到声明 |
gi |
n |
跳转到实现 |
gr |
n |
查找引用 |
<cs-r> |
n |
重命名符号 |
<cs-i> |
n |
代码格式化 |
语言运行 :R
| 语言 |
命令 |
| C/C++ |
编译 → 运行 → 删二进制 |
| Bash |
sh % |
| Go |
go run %;:Rgin 运行 main.go |
| Python |
python3 % |
补全(插入模式)
| 键 |
功能 |
<C-n> / <C-p> |
选择补全项 / snippet 占位跳转 |
<CR>(未选择时) |
换行 |
<CR>(选择后) |
确认补全 |
Tab |
Copilot 接受建议 |
命令栏 / 搜索栏补全
| 键 |
功能 |
Tab / S-Tab |
选择补全项 |
<CR>(未选择时) |
直接执行命令/搜索 |
<CR>(选择后) |
确认补全 |
编辑
| 键 |
模式 |
功能 |
f / F / t / T |
n |
hop 行内跳转(覆盖原生) |
<c-f> |
n |
hop 双字符跳转 |
ga / = |
v |
EasyAlign 对齐 |
gc / gcc |
n |
注释切换(Neovim 0.12 内置) |
zc / zo / za / zR |
n |
折叠(ufo) |
文件树内
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 处理)
安装
# 克隆到 Neovim 配置目录
git clone https://git.qyhhh.top/newbie/nvim.git ~/.config/nvim
# 首次启动会自动安装 lazy.nvim 及全部插件
nvim
许可
MIT