Skip to content

Repository files navigation

Neovim

一套紧凑、开箱即用的现代 Neovim 配置

Neovim >= 0.11Lualazy.nvimLinux

English / 中文

特性 · 安装 · LSP · 键位 · 插件


✨ 特性

  • 基于 lazy.nvim 的插件管理与按需加载
  • 基于 Neovim 原生 API 的 LSP,按文件类型通过 Mason 自动安装
  • blink.cmp 补全:LSP、路径、代码片段、Buffer、Ripgrep、命令/搜索历史及自定义词库
  • Tree-sitter 解析器自动安装,内置自定义语法高亮
  • Biome、LSP 格式化,Go 自动整理 imports
  • 浮动文件树、FZF 搜索、Git hunk、浮动终端、Markdown 预览与渲染
  • 自定义状态栏、折叠、渐变浮窗边框、代码片段和文件类型行为

📦 环境要求

  • 最新稳定版 Neovim(建议 >= 0.11
  • git
  • 推荐安装 Nerd Font
  • 搜索与预览工具:ripgrepfdbat
  • Node.js 与 npm:用于部分 LSP 和构建 Markdown Preview
  • F5 可选运行时:nodets-nodepythongobashluajavacgccgoogle-chrome-stable
  • 可选 Python provider:设置 PYTHON 环境变量
export PYTHON="$(command -v python3)"

Tip

LSP Server、Biome 和 Tree-sitter parser 无需手动逐个安装,首次打开对应文件时会自动安装。

🚀 安装

Warning

安装前请备份现有的 ~/.config/nvim

git clone https://github.com/yaocccc/nvim ~/.config/nvim
nvim

首次启动会自动安装 lazy.nvim 和插件。修改 lua/plugins/ 后执行:

:Lazy sync

常用维护命令:

:Lazy" 插件管理
:Mason" LSP/工具管理
:TSUpdate" 更新 parser
:StartupTime" 启动性能分析

🗂️ 目录结构

.
├── init.lua # 配置入口
├── lua/
│ ├── options.lua # 基础选项、autocmd、折叠
│ ├── keymap.lua # 全局键位
│ ├── lazyinit.lua # lazy.nvim 初始化
│ ├── lspinit.lua # LSP 自动安装与启用
│ ├── blink-cmp-history.lua
│ ├── plugins/ # 插件配置
│ └── ui/ # 高亮与渐变边框
├── lsp/ # 原生 LSP Server 配置
├── ftplugin/ # 文件类型专属行为
├── snippets/ # VS Code 格式代码片段
├── word.txt # blink.cmp 自定义词库
└── lazy-lock.json # 插件版本锁

🔧 LSP 与格式化

文件类型LSP Server格式化
Lualua_lsLSP fallback
Soliditysolidity_lsLSP fallback
JavaScript、TypeScript、ReactvtslstailwindcssBiome
Vuevue_lsvtslstailwindcssLSP,保存时格式化
HTMLhtmltailwindcssLSP fallback
CSS、SCSS、LesscsslstailwindcssLSP fallback
JSON、JSONCjsonlsBiome
Go、go.mod、go.work、templatesgopls保存时整理 imports 并格式化
sh、Bash、ZshbashlsLSP fallback

JavaScript、TypeScript、JSON/JSONC 文件会自动安装 Biome。Tailwind LSP 仅在项目存在 tailwind.config.* 时找到项目根目录。

LSP 键位

模式功能
Normalgd跳转定义
NormalgD跳转声明
Normalgy跳转类型定义
Normalgi跳转实现
NormalgrFinder:引用、定义与实现
NormalK悬浮文档
Normal、VisualgaCode Action
NormalF2重命名
NormalCtrl-e当前 Buffer 诊断
Normal\eWorkspace 诊断
Visual=格式化选区

诊断信息会在 CursorHold 时以浮窗显示;LSP semantic tokens 被禁用,以保持自定义高亮一致。

⌨️ 全局键位

基础编辑

模式功能
Normal、Visual;输入命令(:
Normal,执行寄存器 q 中的宏
Normal\清除搜索高亮
NormalEnter光标位于匹配项时清除高亮,否则正常回车
Normal+ / _数字自增 / 自减
NormalBackspace删除当前词并进入插入
InsertCtrl-h删除到词首
Normal、InsertCtrl-j从下一个逗号处断行
Normal、VisualCtrl-s交互式替换
Normal、VisualS智能保存:创建目录,必要时 sudo
NormalQ强制退出
NormalR重载当前文件
NormalW关闭当前 Buffer
Normalx删除字符且不覆盖剪贴板
VisualBackspacexc删除或修改且不覆盖剪贴板
VisualpP粘贴并保留原寄存器
Visual<Shift-Tab左缩进并保持选区
Visual>Tab右缩进并保持选区
Normal、Insert、VisualAlt-Up / Alt-Down上下移动行或选区
NormalAlt-a全选
Normal、InsertCtrl-u清空当前行
NormalSpace在首列、首个非空字符、行尾间跳转
Normal、Visual0匹配括号跳转
Visualt / T下划线与驼峰互转;T 首字母大写
Insert([{"'`自动补全配对字符
InsertBackspace成对删除括号或引号

命令行模式中 Ctrl-a / Ctrl-e 跳到首尾,Up / Down 浏览历史。

选择与移动

模式功能
Normal、Insert、VisualShift-Up / Shift-Down向上/下选择文本
Normal、Insert、VisualCtrl-Shift-Up / Ctrl-Shift-Down快速移动 10 行
Normal、Insert、VisualCtrl-Shift-Left / Ctrl-Shift-Right跳到行首 / 行尾
Visualv / V扩大 / 缩小选区

窗口、Buffer 与折叠

模式功能
Normalsv / sp左右 / 上下分屏
Normalsc / so关闭当前 / 关闭其他窗口
Normals + Arrow聚焦对应窗口
NormalCtrl-Space切换窗口
Normals=平均窗口大小
NormalAlt-, / Alt-.缩小 / 增大窗口
Normalss下一个 Buffer
Normal、Insert、VisualAlt-Left / Alt-Right上一个 / 下一个 Buffer
Normal-折叠或展开;无折叠时创建段落折叠
Visual-折叠选区
Normal\w切换自动换行
Normaltt下方打开 10 行终端

手动折叠和 undo 历史会持久化到 cache/,重新打开文件时恢复光标位置和视图。

🔍 搜索、补全与 AI

FZF-Lua

功能
Ctrl-p项目文件
Ctrl-a全局文本搜索
Ctrl-bBuffer 列表
Ctrl-l当前 Buffer 行搜索
Ctrl-gGit 变更文件
Ctrl-h当前目录历史文件

搜索根目录使用启动 Neovim 时的 $PWD

Blink.cmp

模式功能
InsertTab选择下一项、触发补全或跳到下个 snippet 占位符
InsertUp / Down上一项 / 下一项
InsertEnter接受补全
InsertCtrl-y选择并接受
InsertCtrl-e取消补全
InsertCtrl-k切换补全和文档
Command-lineTab显示、插入或接受补全

补全源:lsppathsnippetsbufferripgrepdatwordword.txt)、命令历史和搜索历史。

GitHub Copilot

模式功能
InsertRight接受建议;无建议时正常右移
InsertCtrl-Up / Ctrl-Down上一个 / 下一个建议

🌲 文件树、Git 与终端

Nvim Tree

T 打开居中的浮动文件树,首次打开以 $PWD 为根目录。

文件树内功能
a / A新建
r重命名
Left关闭目录
Right / Enter打开节点
Backspace上级目录
P将选中目录设为根
Esc关闭文件树
( / )上一个 / 下一个 Git 变更
< / >上一个 / 下一个诊断
?帮助

其余复制、剪切、粘贴、删除、过滤等键位沿用 Nvim Tree 默认映射。

Gitsigns

功能
( / )上一个 / 下一个 hunk
C预览当前 hunk
\gDiff 当前文件

Floaterm 与一键运行

模式功能
Normal、TerminalCtrl-t打开、隐藏浮动终端
Normal、Insert、TerminalF5保存并运行当前文件

F5 支持 JavaScript、TypeScript、HTML、Python、Go、shell、Lua、Java、C 和 Markdown。窄窗口使用底部终端,宽窗口使用居中浮窗。

📝 Markdown 与文件类型增强

Markdown

模式功能
NormalEnter切换当前任务 [ ] / [x],然后正常回车
NormalDouble-click切换任务并保存
VisualB / I加粗 / 斜体
VisualT转为待办项
Visual`行内代码
VisualC代码块
NormalF5浏览器预览
NormalF6切换编辑器内 Markdown 渲染

Markdown 使用 2 空格缩进,并高亮任务起始日期 S:YYYY-MM-DD、截止日期 D:YYYY-MM-DD、今日和未来两天的 Deadline。

其他文件类型

  • Go:保存前执行 source.organizeImports;Visual D 包裹为 /** ... */
  • TypeScript:Visual D 添加文档注释,Visual T 包裹 try/catch
  • Vue:Visual D 包裹为 <!-- ... -->
  • Snippets:覆盖通用、TypeScript/JavaScript/Vue、Go、HTML、Markdown、SQL、Vim、systemd 和 desktop 文件。

🧩 其他插件

插件用途
yaocccc/visual-multi.nvim多光标编辑
yaocccc/babel.nvimmm 翻译当前词或选区为中文
yaocccc/vim-commentNormal ?? 行注释;Visual / 行注释、? 块注释
yaocccc/vim-surround添加、修改、删除包围字符
yaocccc/vim-echoVisual C 为 JS/TS/Vue 插入 console.log
yaocccc/vim-fcitx2en离开 Insert 模式时切换英文输入法
yaocccc/nvim-lines.lua状态栏与标签栏
yaocccc/nvim-foldsignSign column 折叠标记
Mr-LLLLL/interestingwords.nvimff 高亮当前词,FF 清除全部
uga-rosa/ccc.nvim:CccPick 颜色选择,:CccHighlighterEnable 颜色高亮
nvimdev/indentmini.nvim缩进参考线
yianwillis/vimcdoc中文帮助文档

多光标常用键位

功能
Ctrl-n查找并添加下一个匹配
Ctrl-d添加全部匹配
Ctrl-Up / Ctrl-Down向上 / 下添加光标
Ctrl-x在当前字符添加光标
Ctrl-w按词添加
Ctrl-Left / Ctrl-Right开始或扩展选区
Tab切换扩展模式
q移除当前区域
Esc清除多光标

📄 许可

本仓库为个人配置,欢迎参考、Fork 和按需修改。

About

开箱即用的nvim配置 详细的文档 lua实现

Topics

Resources

Stars

199 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages