一套使用 Lua 编写的 Neovim 配置,面向 C/C++、Python、Lua、Shell、JSON 和 Markdown 开发。插件由 lazy.nvim 管理,集成了 LSP、代码补全、格式化、文件搜索、文件树和快捷键提示。
- One Dark Pro 主题、Bufferline 和 Lualine
- Treesitter 语法高亮、缩进和代码折叠
- Mason 管理语言服务器
- nvim-cmp、LuaSnip 和 friendly-snippets 代码补全
- Lspsaga、Trouble 和 lsp_signature 增强 LSP 交互
- Telescope 文件搜索、文本搜索和
vim.ui.select界面 - nvim-tree 文件管理
- Which-key 快捷键提示
- Conform 统一代码格式化
- GBK、GB18030 和 UTF-8 文件编码兼容
- Neovim 0.12 或更高版本
- Git
tree-sitter-cli0.26.1 或更高版本,用于安装 Treesitter 解析器;需要安装与系统架构匹配的版本并确保命令位于PATH中- Node.js 和 npm,供 Mason 安装
pyright、bashls、jsonls等语言服务器 make和 C 编译器,用于构建telescope-fzf-native.nvimripgrep,用于 Telescope 文本搜索- Nerd Font,推荐用于正确显示图标
stylua、clang-format、black等对应格式化工具,需要根据使用的语言自行安装
- Linux 需要安装对应发行版提供的
make、C 编译器和 Node.js/npm;使用系统剪贴板时,还需要安装xclip、xsel或wl-clipboard。 - macOS 建议执行
xcode-select --install安装 Xcode Command Line Tools,其中包含make和 Apple Clang;系统剪贴板可直接使用自带的pbcopy和pbpaste。 - Apple Silicon 应安装 ARM64 版本的
tree-sitter-cli,Intel Mac 和常见的 x86_64 Linux 应安装 x86_64 版本。 - Mason 会根据当前操作系统和 CPU 架构下载对应的语言服务器,不需要在配置中写死安装路径。
如果已经存在 Neovim 配置,请先备份:
mv ~/.config/nvim ~/.config/nvim.bak克隆配置:
git clone https://github.com/lichao-dev/nvim-config.git ~/.config/nvim启动 Neovim:
nvim首次启动时,lazy.nvim 会自动安装插件,Mason 会安装配置中声明的语言服务器。
.
├── init.lua # 配置入口
├── lua
│ ├── config
│ │ ├── keymaps.lua # 全局快捷键
│ │ ├── lazy.lua # lazy.nvim 初始化
│ │ └── options.lua # Neovim 基础选项
│ └── plugins
│ ├── appearance.lua # 主题、顶部栏、状态栏
│ ├── completion.lua # nvim-cmp 和 LuaSnip 补全
│ ├── editor.lua # Git 标记、注释、括号补全
│ ├── explorer.lua # 文件树和符号大纲
│ ├── format.lua # Conform 格式化
│ ├── lsp-ui.lua # Lspsaga、参数提示、诊断列表
│ ├── lsp.lua # LSP 服务配置和局部快捷键
│ ├── mason.lua # 语言服务器安装与管理
│ ├── snippets.lua # 代码片段
│ ├── telescope.lua # 文件和文本搜索
│ ├── treesitter.lua # 语法高亮、缩进和折叠
│ └── which-key.lua # 快捷键提示和分组
└── snippets
└── c.json # 自定义 C 代码片段
| 文件类型 | 语言服务器 |
|---|---|
| C/C++ | clangd |
| Python | pyright |
| Lua | lua_ls |
| Shell | bashls |
| JSON | jsonls |
| Markdown | marksman |
LSP 相关快捷键只在语言服务器成功连接当前缓冲区后创建。
<leader> 设置为空格键。按下空格并稍作等待,可以通过 which-key 查看当前可用快捷键。
| 快捷键 | 功能 |
|---|---|
<leader>w |
保存文件 |
<leader>q |
关闭当前窗口 |
<leader>Q |
强制退出全部窗口 |
<leader>e |
打开或关闭文件树 |
<leader>? |
查看当前缓冲区的局部快捷键 |
<M-z> |
切换软换行 |
<F8> |
打开或关闭符号大纲 |
| 快捷键 | 功能 |
|---|---|
<C-h> |
移动到左侧窗口 |
<C-j> |
移动到下方窗口 |
<C-k> |
移动到上方窗口 |
<C-l> |
移动到右侧窗口 |
<A-Left> / <A-Right> |
调整窗口宽度 |
<A-Up> / <A-Down> |
调整窗口高度 |
<S-h> / <S-l> |
切换上一个或下一个 Buffer |
| 快捷键 | 功能 |
|---|---|
<leader>ff |
查找文件 |
<leader>fg |
全局文本搜索 |
<leader>fb |
查找已打开的 Buffer |
<leader>fh |
查找帮助文档 |
<leader>fr |
查找最近打开的文件 |
<leader>fc |
搜索光标下的单词 |
<leader>fk |
搜索快捷键 |
<leader>/ |
在当前 Buffer 中搜索 |
<leader>fs |
查找当前文件的 LSP 符号 |
<leader>fw |
查找工作区的 LSP 符号 |
其中 <leader>fs 和 <leader>fw 只在当前 Buffer 连接 LSP 后出现。
| 快捷键 | 功能 |
|---|---|
gd |
跳转到定义 |
gD |
跳转到类型定义 |
gi |
查找实现 |
gr |
查找定义和引用 |
gf |
打开 Lspsaga Finder |
gl |
显示当前行诊断 |
K |
显示悬浮文档 |
<leader>rn |
重命名符号 |
<leader>ca |
使用 Lspsaga 执行 Code Action |
<leader>cA |
调用 Neovim 原生 Code Action,并使用 Telescope 选择菜单 |
<leader>cf |
格式化当前 Buffer |
[d / ]d |
跳转到上一个或下一个诊断 |
<leader>xx |
显示当前文件诊断 |
<leader>xX |
显示工作区诊断 |
| 快捷键 | 功能 |
|---|---|
<C-Space> |
手动触发补全 |
<CR> |
确认当前补全项 |
<Tab> |
选择下一项或展开、跳转代码片段 |
<S-Tab> |
选择上一项或向前跳转代码片段 |
<C-b> / <C-f> |
向上或向下滚动补全文档 |
按 <leader>e 打开 nvim-tree,将光标移动到文件树后可以使用:
| 快捷键 | 功能 |
|---|---|
a |
新建文件或目录,目录名以 / 结尾 |
r |
重命名文件或目录 |
e |
重命名文件主体并保留扩展名 |
u |
修改完整路径,可用于移动文件 |
d |
删除文件或目录 |
<CR> |
打开文件 |
R |
刷新文件树 |
q |
关闭文件树 |
使用 <C-h> 可以从编辑区进入左侧文件树,使用 <C-l> 返回编辑区。
| 文件类型 | 格式化器 |
|---|---|
| Lua | stylua |
| C/C++ | clang-format |
| Python | black,失败时回退到 LSP |
Lua 文件保存时自动格式化。其他文件可以使用 <leader>cf 手动格式化;外部格式化器不可用时会尝试回退到 LSP。
:Lazy
:Mason
:LspInfo
:checkhealth
:checkhealth which-key