Neovim - 重构编辑器配置
本文最后更新于:2025年8月7日 晚上
需求来源
在使用 Neovim 一年多以后,发现之前配置的 Neovim 中的很多功能用不上,显得 Neovim 中的配置十分地臃肿,因此打算重新写一份 Neovim 的配置指南,便于后面重新构建 Neovim,也给需要从零开始构建的朋友们一个参考。
现在配置的 Neovim 具有以下功能:
- 能够运行 \(\LaTeX\) 并且支持实时预览,一键清理 \(\LaTeX\) 的附属文件,支持正向搜索和反向搜索
- 能够方便地切换文件夹中和文件进行编辑,提供类似 VS Code 的文件浏览侧边栏
- 能够支持 \(\LaTeX\),C++/C 和 Python 代码的高亮和自动补全
- 支持 C++/C 和 Python 代码的编译和运行
- 好看的主题和类 VS Code 的界面 UI
- 支持 Git 查看新增和修改的代码段,优化 Git 提交显示
- 支持彩虹配对括号和特殊注释高亮
- 自动高亮和当前光标下相对应的单词
- 显示不同缩进参考线
- 支持快速查询快捷键和 Git 记录查询
- 自动切换中英输入法
- 美观的状态栏以及丰富的图标支持
- 支持模糊搜索
- 支持给指定文本快速添加配对符号如括号、引号等
- 集成 Copilot AI 辅助代码和文本写作
- 支持快捷注释和取消注释代码块
- 提供缓冲区标签栏,支持快速切换缓冲区和鼠标操作
- 支持插件管理界面和懒加载
如果想要开箱即用,我个人的 Neovim 配置的仓库地址:neovim-config
版本信息
我使用的系统是 Windows 10 22H2,我的 Neovim 版本信息如下:
1 | |
Neovim 配置基础知识
Lua 语言
在配置 Neovim 的时候,尽量使用 Lua,因为这是 Neovim 而不是 Vim,如果对 Lua 不了解,可以快速了解一下基本的语法和语义:Learn Lua in Y Minutes。
配置文件路径
在 Windows 10 系统中,Neovim 的配置文件路径一般在 C:\Users\<UserName>\AppData\Local\nvim\。默认会读取该文件夹下的 init.lua 或者 init.vim 文件,这也是配置文件的主入口,理论上来说可以将所有的配置都写到这个文件里面,但是这不是一个好做法,因此划分成不同的文件和目录来管理不同功能的配置会更好。
本篇教程配置 Neovim 之后的目录结构应该是下面的样子:
1 | |
解释如下:
init.lua为 Neovim 配置的主入口,用于导入其他*.lua文件。lua目录,当我们在 Lua 中调用require加载模块(文件)的时候,它会自动在lua文件夹里进行搜索- 将路径分隔符从
/替换为.,然后去掉.lua后缀就得到了require的参数格式
- 将路径分隔符从
core目录,用于管理核心配置和 Neovim 自带的配置plugins目录,用于管理插件
选项配置
主要用到的就是 vim.g、vim.opt、vim.cmd
按键配置
在 Neovim 中进行按键绑定的语法如下:
1 | |
从零开始配置 Neovim
在配置 Neovim 的时候弄清楚每一个选项的意思是很有必要的,因此会尽量在本文中说明每个选项的含义,同时在配置中会有相应的注释,如果没有说明则该选项的意义在注释中可以找到,尽量让配置文件是 self-contained 而且可读性强。
安装 Neovim
我使用的是 Scoop,因此安装 Neovim 只需要在命令行中运行下面的指令就可以:
1 | |
安装完成之后如果不存在前面说的配置文件夹和相应的 init.lua 文件,直接创建目录并新建 init.lua 文件即可。每次修改配置文件后,将配置文件编辑保存,重启 Neovim 就能看到相应的效果。接下来会按照 Neovim 启动执行文件的顺序介绍各个模块。
init.lua 入口文件
Neovim 启动时首先加载的就是 init.lua 文件:
require("core")加载lua/core/init.lua,初始化所有核心编辑器设置require("bootstrap")加载lua/boostrap.lua,启动并配置lazy.nvim插件管理器
init.lua 文件配置:
1 | |
lazy-lock.json 文件由 lazy.nvim 自动生成和管理,用于锁定所有插件的 commit hash,确保在不同设备上或重装时能恢复到完全相同的插件版本,保证了配置的稳定性。
lua/core 核心配置
core/init.lua 核心模块的入口
作为 core 模块的入口,按顺序加载所有核心配置文件:
1 | |
core/keymaps.lua 定义全局快捷键
定义全局的快捷键和一些插件的快捷键:
1 | |
core/options.lua 全局选项配置
定义 Neovim 的全局选项配置:
1 | |
core/autocmds.lua 自动命令配置
设置自动命令,用于在特定事件发生时执行操作:
1 | |
core/functions.lus 自定义函数
存放可被复用的自定义 Lua 函数:
1 | |
lua/bootstrap.lua 插件管理器
负责 lazy.nvim 插件管理器的安装和配置,主要功能:
- 自动检查
lazy.nvim是否安装,如果未安装则从 Github 下载 - 调用
require("lazy").setup(),并从lua/plugins和lua/plugins/lsp目录导入所有插件配置 - 自定义
lazy.nvim的界面图标
文件配置:
1 | |
lua/plugins 插件配置
plugins/lsp 代码分析与补全
lsp/ 目录用于存放所有与 LSP(Language Server Protocol)、代码补全和语法分析相关的插件。
lspconfig.lua 主配置文件
用于连接 mason 安装的 LSP 服务器到 Neovim 的 LSP 客户端。
1 | |
mason.lua LSP 管理
核心的 LSP 管理工具,用于安装和管理 LSP 服务器、代码格式化工具(Formatter)和代码检查工具(Linter)。
1 | |
nvim-cmp.lua 自动补全
核心的自动补全引擎插件:
1 | |
vimtex-cmp.lua \(\LaTeX\) 支持
通过显示额外信息、符号和 BibTeX 解析,提升 LaTeX 编辑效率:
1 | |
plugins/autopairs.lua 自动补全括号
自动补全括号、引号等成对符号:
1 | |
bufferline.lua 缓冲区标签栏
在顶部显示一个类似 VSCode 的标签栏,用于展示和切换打开的缓冲区:
1 | |
colorscheme.lua 颜色主题
设置 gruvbox 为主颜色主题,并覆盖了一些高亮组以优化显示效果:
1 | |
comment.lua 注释插件
强大的注释插件,通过 <C-/> 智能切换注释:
1 | |
copilot.lua 集成 AI
集成 GitHub Copilot,提供 AI 代码建议:
1 | |
gitsigns.lua Git 状态集成
在行号列显示 Git 状态(新增、修改、删除):
1 | |
im-select.lua 自动切换输入法
自动切换中英输入法:
1 | |
indent-blankline.lua 显示缩进参考线
显示缩进参考线,使代码结构更清晰:
1 | |
local-highlight.lua 自动高亮
自动高亮光标下的所有相同单词:
1 | |
lualine.lua 丰富状态栏
配置一个功能丰富的状态栏,显示模式、Git 分支、诊断信息、文件名等:
1 | |
nvim-tree.lua 文件浏览侧边栏
一个高性能的文件浏览器侧边栏,替代了默认的 netrw:
1 | |
nvim-web-devicons.lua UI 组件
为各种 UI 组件(如 nvim-tree, lualine)提供文件类型图标:
1 | |
rainbow-delimiters.lua 彩虹符号
为配对的符号(比如 (),[],{})的不同层级添加不同的颜色,方便区分:
1 | |
surround.lua 环绕符号增强
方便地添加、修改和删除环绕符号,例如将 hello 变为 "hello":
1 | |
telescope.lua 模糊搜索
一个高度可扩展的模糊搜索工具,用于快速查找文件、缓冲区、Git 提交、帮助文档等:
1 | |
todo-comments.lua 高亮代码注释
高亮代码中的 TODO,WARNING,NOTE,HACK,PERF,FIX 等特殊注释:
1 | |
treesitter.lua 语法高亮
提供更快速、更精确的语法高亮和代码结构分析:
1 | |
vimtex.lua \(\LaTeX\) 集成
为 LaTeX 提供了强大的支持,包括编译、预览、目录、语法高亮等:
1 | |
which-key.lua 编辑体验增强
当按下 <leader> 键后,弹窗提示所有可用的后续快捷键,同时定义了大量围绕文件、编译、Git 和 Telescope 的快捷键:
1 | |