- 文档
- 知识库
- 开发工具
【免费下载链接】awesome-neovim
Collections of awesome neovim plugins.
本文档基于 awesome-neovim 仓库根目录的 MAINTAINERS.md 维护者指南编写,聚焦于该 Neovim 插件精选列表在"高质量收录"与"友好贡献者体验"之间的平衡实践。读者将掌握完整的 PR 审核流程、自动化合规脚本(scripts/batch_pr_compliance.sh 等)的使用方法、争议 PR 处理时限与模板话术,以及从 README.md 的 Colorscheme 章节沿袭下来的[TS]/[LSP]标签判定标准,可将其直接迁移到任何自维护的 awesome 类精选仓库。
仓库定位与维护目标
awesome-neovim 的目标是收录"高质量且 Neovim 专属"的插件:从 README.md 的开篇声明可以看出,它只收录 Neovim 特有功能,Vim 兼容插件一律不列。维护者指南则明确了治理目标——"curate high-quality Neovim plugins while maintaining a welcoming contributor experience",即一方面保证插件清单质量,另一方面让贡献者感受到友好与可预期的流程。
当前维护团队包括:Owner 与两位 Maintainer,新维护者加入后需遵循"先批准再合并"的建议——如果不确定,可以请其他维护者复核。
新人维护者快速上手
必备工具安装
维护脚本依赖jq(处理 GitHub API 的 JSON 输出)与git(浅克隆校验仓库),按发行版安装:
sudo apt install jq git # Ubuntu 系 sudo pacman -S --needed jq git # Arch 系随后安装并登录 GitHub CLI,所有脚本均通过gh与 GitHub API 交互:
gh auth login参考 PR 示例
指南建议新维护者先阅读示例 PR(如 #1579),观察"所有测试如何通过"的完整流程,并在审查时给出具体的修改意见(specifics to change),而不是泛泛而谈。
争议 PR 的处理时限
为避免"request changes 后 PR 作者无限期失联"拖慢仓库节奏,维护者指南规定了一周响应时限:PR 收到变更请求后,作者需在 7 天内回应。超时未响应即可关闭 PR,官方关闭话术如下(可直接复用或仿写):
A week has passed after the PR was reviewed with request for changes, and no response was given. Therefore, I'm closing this PR. You can open a new Pull Request later. Sorry for the inconvenience!这一规则的意义在于:维护者明确告知"关闭不等于拒绝",作者随时可以重开新 PR,保证了流程的温和与确定性。
章节(Section)的增删规则
作为按分类组织的精选列表,awesome-neovim 对章节数量有硬性约束:
- 新增章节:必须至少包含3 个插件,否则即使理由充分也会被拒绝;
- 删除章节:当某章节因插件维护或移除而少于2 个时,必须删除该章节,并将其中的插件迁移到其他合适的章节。
这套规则从结构上防止了列表碎片化——既不鼓励"为了开新坑而开新章节",也及时合并萎缩的分类。
日常工作流
自动化报告(三通道)
维护者每天应关注三类自动生成的信息:
- GitHub Issues:每日自动生成的状态报告;
- PR 评论:每个 PR 的自动化合规检查结果;
- 邮件通知:GitHub 针对紧急事项的通知。
审查优先级排序
- 🚨Priority(优先):review 后又新增了提交的 PR(每日报告中重点标记);
- 📋Needs Review(待审):还没有任何 review 的新 PR;
- ✅Reviewed(已审):已有 review 且无新提交的 PR。
手动命令
要获取全部待审 PR 的合规概览,将gh pr list输出的 PR 编号以空格分隔后批量传入合规脚本:
./scripts/batch_pr_compliance.sh $(gh pr list --state open --limit 20 --json number --jq '.[].number' | tr '\n' ' ')要对特定 PR 做仓库质量分析(README 质量、许可证、贡献指南等),运行:
./scripts/batch_pr_readme_review.sh <PR_numbers>审核指南
收录验收标准(Acceptance Criteria)
新插件要进入仓库,必须同时满足以下条件:
| 要求 | 说明 |
|---|---|
| Must be Neovim-specific | 插件必须兼容且可在 Neovim 中使用(Vim 兼容插件不收) |
| Must be functional and usable | 被证实损坏的插件不可收录,直到问题修复 |
| Must be licensed under an Open-source license | 未发现许可证时,须向作者建议MIT或Apache 2.0 |
| Should have a quality README | README 必须包含足够详细的安装/使用说明 |
| Should be actively maintained | 最好有近期提交记录 |
| Should be a week old at least | 插件必须至少存在一周以验证稳定性;若达标但"年龄不足",应打上pending-merge标签,并明确告知作者"符合收录但需等待足够时间后再合并" |
常见问题与修正对照
| 问题项 | ❌ 错误示例 | ✅ 正确示例 |
|---|---|---|
| PR 标题 | "Add awesome plugin" | "Addusername/repo" |
| 描述 | "A Neovim plugin that..." | "Tool for X functionality." |
| 许可证 | 缺失 | MIT/Apache 2.0 许可证文件 |
注意描述中避免出现 "plugin" 字样、描述应以句号结尾,这些约束在 scripts/batch_pr_compliance.sh 中均有对应的正则硬校验(见下文)。
常用回复模板
请求修改时,附上具体的措辞建议:
Please reword your description as suggested below: ```markdown ... ```批准合并时:
✅ Great contribution! Approved for merge.或简写:
LGTM.插件"够格但未满一周"时:
Looks good to me. We usually wait a little bit for newer plugins to stabilize. Thank you for your patience!Colorscheme 标签体系
自 PR #2044 起,仓库对配色方案的收录方式改为标签系统(README.md 的 Colorscheme 章节与 MAINTAINERS.md 一致),每个配色方案条目会携带一个或多个标签:
[TS]- 具备 Tree-sitter 高亮;[LSP]- 支持 LSP Semantic Tokens;[L/D]- 同时提供 light 与 dark 两种变体;[Lua]- 使用 Lua 编写;[Fnl]- 使用 Fennel 编写。
仓库中的真实条目示例(摘自 README.md):
- [rezniqov/soviet.nvim](https://github.com/rezniqov/soviet.nvim) - **_`[TS][LSP][L/D][Lua]`_** Warm colorschemes inspired by soviet visual culture. - [wurli/cobalt.nvim](https://github.com/wurli/cobalt.nvim) - **_`[TS][LSP][Lua]`_** A (mostly) faithful port of the classic blue theme from TextMate. - [kuri-sun/yoda.nvim](https://github.com/kuri-sun/yoda.nvim) - **_`[TS][L/D][Lua]`_** Muted green palette for focused, balanced editing.Tree-sitter([TS])标签判定
打[TS]标签的前提是配色方案必须为 Tree-sitter 提供高亮组。Tree-sitter 高亮组以@字符开头(@lsp.开头的除外,那是 LSP 语义令牌专属)。判定时可对照以下完整高亮组清单逐一核对:
"@annotation" "@attribute" "@boolean" "@character" "@character.printf" "@character.special" "@comment" "@comment.error" "@comment.hint" "@comment.info" "@comment.note" "@comment.todo" "@comment.warning" "@constant" "@constant.builtin" "@constant.macro" "@constructor" "@constructor.tsx" "@diff.delta" "@diff.minus" "@diff.plus" "@function" "@function.builtin" "@function.call" "@function.macro" "@function.method" "@function.method.call" "@keyword" "@keyword.conditional" "@keyword.coroutine" "@keyword.debug" "@keyword.directive" "@keyword.directive.define" "@keyword.exception" "@keyword.function" "@keyword.import" "@keyword.operator" "@keyword.repeat" "@keyword.return" "@keyword.storage" "@label" "@markup" "@markup.emphasis" "@markup.environment" "@markup.environment.name" "@markup.heading" "@markup.italic" "@markup.link" "@markup.link.label" "@markup.link.label.symbol" "@markup.link.url" "@markup.list" "@markup.list.checked" "@markup.list.markdown" "@markup.list.unchecked" "@markup.math" "@markup.raw" "@markup.raw.markdown_inline" "@markup.strikethrough" "@markup.strong" "@markup.underline" "@module" "@module.builtin" "@namespace.builtin" "@none" "@number" "@number.float" "@operator" "@property" "@punctuation.bracket" "@punctuation.delimiter" "@punctuation.special" "@punctuation.special.markdown" "@string" "@string.documentation" "@string.escape" "@string.regexp" "@tag" "@tag.attribute" "@tag.delimiter" "@tag.delimiter.tsx" "@tag.tsx" "@tag.javascript" "@type" "@type.builtin" "@type.definition" "@type.qualifier" "@variable" "@variable.builtin" "@variable.member" "@variable.parameter" "@variable.parameter.builtin"LSP Semantic Tokens([LSP])标签判定
打[LSP]标签的前提是配色方案为 Semantic Tokens 提供了高亮。LSP 语义令牌高亮组统一以@lsp.开头,其中@lsp.type.*为类型令牌、@lsp.typemod.*为类型修饰令牌。完整清单如下:
"@lsp.type.boolean" "@lsp.type.builtinType" "@lsp.type.comment" "@lsp.type.decorator" "@lsp.type.deriveHelper" "@lsp.type.enum" "@lsp.type.enumMember" "@lsp.type.escapeSequence" "@lsp.type.formatSpecifier" "@lsp.type.generic" "@lsp.type.interface" "@lsp.type.keyword" "@lsp.type.lifetime" "@lsp.type.namespace" "@lsp.type.namespace.python" "@lsp.type.number" "@lsp.type.operator" "@lsp.type.parameter" "@lsp.type.property" "@lsp.type.selfKeyword" "@lsp.type.selfTypeKeyword" "@lsp.type.string" "@lsp.type.typeAlias" "@lsp.type.unresolvedReference" "@lsp.type.variable" "@lsp.typemod.class.defaultLibrary" "@lsp.typemod.enum.defaultLibrary" "@lsp.typemod.enumMember.defaultLibrary" "@lsp.typemod.function.defaultLibrary" "@lsp.typemod.keyword.async" "@lsp.typemod.keyword.injected" "@lsp.typemod.macro.defaultLibrary" "@lsp.typemod.method.defaultLibrary" "@lsp.typemod.operator.injected" "@lsp.typemod.string.injected" "@lsp.typemod.struct.defaultLibrary" "@lsp.typemod.type.defaultLibrary" "@lsp.typemod.typeAlias.defaultLibrary" "@lsp.typemod.variable.callable" "@lsp.typemod.variable.defaultLibrary" "@lsp.typemod.variable.injected" "@lsp.typemod.variable.static"判断要点:若配色方案宣称支持 Tree-sitter,则需检查是否定义了上述
@系列高亮组;若宣称支持 LSP 语义高亮,则需检查是否定义了@lsp.系列。两类标签互不包含、各自独立判定。
特殊情况处理(Special Cases)
无许可证仓库
- 在许可证问题解决前 DO NOT MERGE(禁止合并)。无许可证的仓库在法律上默认为 "all rights reserved"(保留所有权利),不可随意收录;
- 应向插件作者建议
MIT或Apache 2.0(兼容性考虑)。
重复插件
- 对照已收录插件评估唯一性与质量;
- 考虑不同的实现思路与使用场景(同一功能可能有定位不同的实现,不必然构成重复)。
安全
安全事件处理原则非常明确,无讨价还价余地:
- AVOID CLONING SUSPICIOUS CODE!(避免克隆可疑代码)
- CLOSE MALICIOUS PRs IMMEDIATELY!(立即关闭恶意 PR)
- REPORT AND CLOSE ANY SUSPECTED PRs!(举报并关闭任何可疑 PR)
自动化能力与手动脚本
仓库用 GitHub Actions 保障 PR 质量,同时提供了可在本地手动运行的同款脚本(scripts/目录)。这套机制正是审核流程"可落地"的关键。
GitHub Actions 三类任务
- PR Compliance Check:对新/更新 PR 给出自动合规反馈;
- Quality Analysis:每周仓库健康报告;
- Status Notifier:每日仪表盘与紧急告警。
手动脚本速查
# 批量合规检查(传入 PR 编号) ./scripts/batch_pr_compliance.sh <PR_numbers> # 批量 README 质量分析 ./scripts/batch_pr_readme_review.sh <PR_numbers> # 强制重新分析(即使 PR 已审且无新提交) ./scripts/batch_pr_readme_review.sh <PR_numbers> --force # 修正 README 中大部分不规范的缩写/大写(如 lsp→LSP、yaml→YAML) ./scripts/readme-check.sh状态指示符(Status Indicators)
- 🚨Priority:review 后有更新;
- 📋Needs Review:尚无 review;
- ✅Reviewed:已有 review、无新提交;
- ❌Non-Compliant:存在问题。
合规脚本的源码级实现(scripts/batch_pr_compliance.sh)
从脚本源码可以看出合规检查的完整判定链,维护者可据此理解"什么样的 PR 会被标记为 Non-Compliant":
- Review 状态判定:通过
gh pr view --json reviews,commits拉取评审与提交数据,过滤掉 PENDING 状态的 review 后,比较最新 review 的submittedAt与各提交的authoredDate,得出"无 review / review 后无新提交 / review 后有 N 个新提交"三档结论(分别对应 📋 / ✅ / 🚨); - 标题格式校验:用正则
^(Add|Update|Remove)\s\[^` /]+/[^` /]+`$校验 PR 标题,不符合"Add/Update/Remove + \username/repo`"格式即判不合格; - 仓库存在性与 README 检查:先从 PR diff 或标题中提取
https://github.com/...仓库 URL,用gh repo view验证仓库存在,再git clone --depth 1浅克隆,并在预设的 12 种 README 命名(README.md、readme.markdown、README.org、README.rst、README.txt、README等)中查找,找不到即不合格; - 描述合规检查:diff 描述中出现单词 "plugin"(正则
\+\s*-\s.*\s[Pp]lugins?(\s|\.))不合格;描述不以句号结尾不合格; - 汇总输出:最后打印 COMPLIANCE SUMMARY 与 REVIEW STATUS SUMMARY,并按类别列出各 PR 编号。
README 质量分析脚本(scripts/pr_readme_review.sh)
该脚本用于评估候选插件的 README 质量,核心检查项包括:总行数(少于 5 行告警)、是否含 description/about/neovim 等描述关键词、许可证检测(通过 awk 对 LICENSE 文件内容匹配 MIT/Apache 2.0/GPL/BSD/ISC/MPL/CC/EPL,并校验全文是否超过 10 行)、是否有贡献指南、功能条目数(少于 3 项告警)、是否有 install/usage 说明、是否有截图/示例。而 scripts/batch_pr_readme_review.sh 则负责从 PR 的 diff/标题中提取仓库 URL(含.git后缀补齐),并按 Priority → Needs Review → Optional 的顺序批量调用上述脚本——Optional 档默认跳过,除非显式加--force。注意:从源码看该批处理脚本内部调用了绝对路径/home/rockerboo/code/awesome-neovim/scripts/pr_readme_review.sh,如需在本地运行,可将其改为仓库内的相对路径./scripts/pr_readme_review.sh。
格式修正脚本(scripts/readme-check.sh)
该脚本自动修正 README 中不规范的缩写与大小写,覆盖面极广(从源码可见 40+ 个检查函数):AI/LLM/ChatGPT/Claude/Copilot/Deepseek、LSP/Language Server Protocol、YAML、JSON/JSON5/JSONC、Tree-sitter、Neovim/Vim、Python/Ruby/Rust/Go、GitHub/GitLab、Linux/macOS/BSD 等专有名词的大小写,同时清理行尾空格与列表项标点。常用参数:
-h打印帮助;-v冗余输出(可叠加);-C关闭彩色输出;-p仅检查标点;-P仅检查大写规范;-t仅检查行尾空格;-c"dry-run" 模式:若产生了任何修正则报错退出(适合 CI 校验);-L列出所有支持的修正项。
脚本执行时会为每次修改创建临时备份(mktemp),结束时自动清理,并内置 SIGINT 安全清理逻辑;若README.md不存在或不可写会直接报错退出。配套的 scripts/fix-yaml-lint.sh 则用于修复.github/workflows/*.yml中常见的 yamllint 问题(去除行尾空格、补充文档起始---、补齐文件末尾换行),修改前同样会创建.bak备份。
故障排查(Troubleshooting)
按以下顺序排查脚本运行问题:
- 确认依赖已安装(
jq、git,按发行版选择对应命令); - 确认 GitHub CLI 已登录:
gh auth login; - 确认脚本可执行(macOS/Linux/BSD),若脚本没有可执行权限:
chmod 755 scripts/*.sh- 按需运行脚本验证,例如:
./scripts/readme-check.sh小结:一套可复用的 awesome 仓库治理范式
从 MAINTAINERS.md 可以提炼出一套完整的精选列表治理闭环:明确的验收标准(Neovim 专属 + 可运行 + 开源许可证 + 好 README + 活跃维护 + 一周稳定性验证)→ 自动化合规与质量脚本兜底(batch_pr_compliance.sh 负责格式与仓库校验,pr_readme_review.sh 负责 README 深度体检)→ 透明的争议处理(一周时限 + 关闭话术)→ 结构化的章节治理(3 个起步、2 个即删)→ 精细化的 Colorscheme 标签体系([TS]/[LSP]/[L/D]/[Lua]/[Fnl]五维标注)。其中 Colorscheme 标签判定依赖的@与@lsp.高亮组清单、以及各脚本的判定正则,均可直接照搬用于其他 Neovim 生态的精选列表或自建插件仓库的 CI 质量门禁。
- 文档
- 知识库
- 开发工具
【免费下载链接】awesome-neovim
Collections of awesome neovim plugins.
相关推荐
Homebrew/brew 维护者实战指南:PR 评审、合并门槛与自动化批准流水线
Homebrew/brew 维护者实战指南:PR 评审、合并门槛与自动化批准流水线 本文以 Homebrew/brew 仓库的维护者指南 docs/Mainta
CLI包管理器NOFX 维护者协作体系:PR 审查、项目管理与自动化工作流全指南
NOFX 维护者协作体系:PR 审查、项目管理与自动化工作流全指南 NOFX 是一个面向美股、大宗商品、外汇与加密货币的 AI 交易终端辅助系统,其开源仓库为社
AI Agent金融科技后端前端Front-End-Checklist 实战指南:HTTP 到 HTTPS 的 301 重定向配置全解析
Front End Checklist 实战指南:HTTP 到 HTTPS 的 301 重定向配置全解析 本篇技术指南以 Front End Checklist
测试开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考