vim-galore 插件全景指南:从颜色主题到 LSP 的 Vim 插件生态手册
vim-galore 插件全景指南:从颜色主题到 LSP 的 Vim 插件生态手册
本文基于 vim-galore 仓库中的 PLUGINS.md 插件清单,系统梳理 Vim 插件生态中的代表性项目:涵盖颜色主题、主题功能分类(对齐、补全、模糊查找、状态栏、版本控制等)、语言文件类型分类三大维度,并结合仓库内 README.md 的"插件管理"章节与 minimal-vimrc.vim 配置文件,讲解插件管理器的工作原理(runtimepath)与挑选插件的实用标准。读完本文,你将拥有一张完整的 Vim 插件地图,能够按需为自己组装一套高效、可维护的插件栈。
一、这份清单在仓库中的位置与定位
vim-galore 以 README.md 为主干教程(覆盖基础、使用技巧、命令、调试、常见问题等主题),而 PLUGINS.md 是其"插件目录"部分:一份按三个维度组织的精选插件清单:
- Colorschemes:配色方案;
- By topic:按功能主题划分(共 18 个主题);
- By filetype:按编程语言文件类型划分(共 13 个语言分类)。
清单的收录标准在 CONTRIBUTING.md 中有明确交代:新插件需"已经积累了一定的 star 数"(have collected a few stars already),作者以"社会证明"(social proof)作为实用性的参考指标——这保证了清单中的项目都是经过社区验证、可放心尝试的成熟插件。
与这份清单配套的,是 README 中的 Managing plugins 章节:它解释了插件管理的底层原理,并直接链回 PLUGINS.md#plugin-managers。因此,阅读清单前有必要先理解插件管理机制,下文第三节将展开。
二、Colorschemes:Vim 的视觉皮肤
Vim 的颜色主题决定语法高亮与界面元素的配色。PLUGINS.md 列出的常用主题按风格可分为几类,选型时主要看对比度与个人偏好:
- 经典系:solarized(及其高对比度变体 solarized8、flattened)、zenburn、molokai(Monokai 移植版)、railscasts、jellybeans、lucius、tomorrow、vividchalk;
- 现代暗色系:gruvbox、nord、dracula、onedark、gotham、oceanic-next、apprentice、paramount、seoul256、janah、nofrils;
- 系统/工程向:base16(一套可编程的 16 色构建体系)、acme-colors(Plan 9 风格)、yowish。
配色方案的背景知识在 README.md 的 Colorschemes 章节 有补充:Vim 的颜色渲染依赖 t_Co(终端颜色数)、background、colorcolumn 等选项,在使用 256 色或 truecolor 终端时还需配合 set t_Co=256 或 set termguicolors 生效(见 True colors 一节)。
自己生成主题:清单还推荐了两个配色生成器——themer 与 Colortemplate。后者是一个 Vim 插件,允许用模板语言声明式地生成 .vim 高亮文件,适合想要精确控制每一个高亮组(highlight group)的进阶用户。
三、By topic:按功能主题挑选插件
这是清单的主体部分,覆盖了日常使用中几乎全部的高频场景。以下按主题逐一说明各插件的定位与搭配思路。
对齐(Alignment)
| 插件 | 定位 |
|---|---|
| tabular | 按指定字符(如 =、` |
| vim-easy-align | 交互式对齐,按 ga 后输入目标字符即可智能对齐 |
| vim-lion | 操作符式对齐,将 gl/gL 映射为对齐操作符,兼容 Vim 操作符文法 |
三者定位相似,tabular 偏"传统命令式",vim-easy-align 偏"交互式",vim-lion 与操作符体系结合最紧密,可按使用习惯选一个。
构建与静态检查(Building and linting)
| 插件 | 定位 |
|---|---|
| ale | 异步 Lint Engine,后台运行 linter,出错即时在侧边显示 |
| neomake | 异步 :make,基于 job 控制,可自定义异步任务 |
| syntastic | 经典的同步语法检查插件,生态最老、兼容性广 |
其中 ale 与 neomake 是异步时代的主流,syntastic 则是历史主力。注意 README.md 的提醒:Vim 是单线程的,前台运行外部程序会阻塞一切,异步插件正是为了规避这一问题而出现(Neovim 则通过内置 job API 原生解决)。
代码补全(Code completion)
| 插件 | 定位 |
|---|---|
| YouCompleteMe | 功能全面的引擎式补全,需要编译 C++ 后端 |
| deoplete.nvim | 异步补全框架(Neovim 专用),可扩展各类源 |
| neocomplete.vim | deoplete 的前身,同步补全框架(Vim 8 之前) |
| asyncomplete.vim | 轻量异步补全框架,常与 vim-lsp 搭配 |
| completor.vim | 异步补全,集成多种后端 |
| nvim-completion-manager | Neovim 补全管理器 |
| supertab | 用 <Tab> 触发并遍历补全 |
| vim-mucomplete | 多策略补全:一键按多种方式(字典、整行、文件名、关键字)补全 |
| VimCompletesMe | 极简补全增强,<Tab> 直达关键词/文件补全 |
若想接入语言服务协议,应与下文 LSP 一节中的 vim-lsp 或 coc.nvim 组合使用,形成"补全框架 + LSP 源"的现代方案。
循环与递增(Cycle)
- switch.vim:在成对的备选形式间切换,如
true ↔ false、== ↔ !=、if/unless; - vim-speeddating:让
Ctrl-A/Ctrl-X支持日期、时间甚至罗马数字的递增/递减。
注释(Commenters)
- nerdcommenter:功能全面的注释插件,支持大量文件类型与注释风格;
- tcomment_vim:按文件类型智能注释/取消注释;
- vim-commentary:tpope 的极简注释方案,
gc操作符式注释,与 Vim 哲学最契合。
数据库(Databases)
- pgsql.vim:PostgreSQL 专用,提供方言感知的补全、语法与文档;
- vim-dadbod:通用数据库客户端,通过 DSN 连接多种数据库并执行查询。
定界符(Delimiter)
- auto-pairs:自动成对插入括号/引号,并支持跨行配对;
- delimitMate:经典的成对字符自动补全;
- vim-endwise:自动补全
if/def/do等结构的end,对 Ruby/Vimscript 尤为有用。
模糊查找(Fuzzy finders)
| 插件 | 备注 |
|---|---|
| fzf 与 fzf.vim | 基于命令行模糊查找器 fzf,速度与体验俱佳,当前主流选择 |
| ctrlp.vim | 纯 Vim 实现的经典模糊查找器,无需外部依赖 |
| Command-T | 需要 +ruby 支持 |
| denite.nvim | 需要 +python3,Shougo 的统一异步框架 |
| LeaderF | 需要 +python 或 +python3,支持文件/标签/缓冲区/命令多维查找 |
| unite.vim | denite 的前身,历史经典 |
使用模糊查找器时需注意:部分插件对 Vim 编译特性有硬性要求(+ruby/+python3),安装前建议先用 :version 或 vim --version 确认当前 Vim 是否包含对应特性。
全文检索(Grep tools)
- vim-grepper:统一封装
grep/ack/ag/rg等外部工具,提供一致的检索界面与结果跳转; - ferret:改进的异步检索,支持多词替换与快捷操作;
- ctrlsf.vim:在类似 Sublime 的侧栏里展示检索结果,可即时编辑。
缩进可视化(Indent)
- indentLine:用细线绘制缩进层级,方便目测代码块边界;
- vim-indent-guides:以交替背景色标示缩进层次。
LSP 客户端
LSP(Language Server Protocol)让 Vim 获得语言服务器的补全、跳转、诊断能力。清单给出的四个客户端:
| 插件 | 定位 |
|---|---|
| coc.nvim | 类 VSCode 的扩展化 LSP 客户端,通过 Node.js 扩展提供丰富能力 |
| LanguageClient-neovim | Neovim 上的 LSP 客户端,异步架构 |
| vim-lsp | 纯 Vimscript 的 LSP 客户端,常与 asyncomplete 搭配 |
| vim-lsc | 面向 Vim 8 的 LSP 客户端,优先使用通道特性 |
LSP 是当代 Vim 配置的重头戏,选型时可根据"是否接受 Node 运行时"(coc)、"是否纯 Vimscript"(vim-lsp)等条件取舍。
导航(Navigation)
| 插件 | 定位 |
|---|---|
| nerdtree | 经典侧边文件树 |
| vim-dirvish | 轻量目录浏览,直接将目录当缓冲区编辑 |
| vim-vinegar | 在 netrw 上做减法,- 一键进入文件浏览 |
| vimfiler.vim | 功能强大的文件管理器(依赖其他插件) |
| tagbar | 侧栏展示 ctags 生成的代码大纲 |
| vim-easymotion | 按键直达跳转,对屏内任意位置打标签 |
| vim-sneak | 两键精确跳转到任意字符组合 |
此外,清单提示"模糊查找器也可用作导航",可参见 Fuzzy finders 一节。文件树与模糊查找是现代 Vim 配置中互补的两类导航手段。
插件管理器(Plugin managers)
| 插件 | 定位 |
|---|---|
| vim-plug | 极简声明式管理器,支持并行安装/更新与按需加载 |
| dein.vim | 高性能异步管理器,功能最全 |
| minpac | 基于 Vim 8 包特性的极简管理器 |
| vundle.vim | 早期流行的管理器,声明式风格 |
| vim-pathogen | 第一代"伪管理器",仅调整 runtimepath |
| vim-addon-manager | 轻量脚本式管理器 |
| apt-vim | 通过 apt-get 式命令管理插件 |
原理补充:README 的 Managing plugins 指出,Pathogen 是第一代流行方案,它本身并不安装插件,只是调整 runtimepath(:h 'rtp')把某目录下的所有插件目录纳入搜索路径,克隆插件仓库仍需手工完成;而"真正的插件管理器"(如 vim-plug、dein)会暴露 :PlugInstall 这类命令,让你在 Vim 内部直接安装与更新插件。
代码片段(Snippets)
| 插件 | 备注 |
|---|---|
| ultisnips | 功能最强大的片段引擎,支持 Python 驱动的动态片段 |
| neosnippet.vim | Shougo 的片段方案(依赖其他插件) |
| vim-snipmate | SnipMate 续作,轻量(依赖其他插件) |
| xptemplate | 模板式片段系统,支持条件展开与嵌套 |
状态栏(Statusline)
- vim-airline:无需配置的现代化状态栏,自动集成补全、语法、分支等状态;
- lightline.vim:纯 Vimscript 的极简状态栏,主题与 airline 兼容;
- powerline:Python 实现的状态栏框架,跨编辑器复用;
- vim-flagship:tpope 的轻量状态栏辅助库。
注意:状态栏依赖 minimal-vimrc.vim 中 set laststatus=2 这类"始终显示状态栏"的设置才会生效(该配置文件第 20 行即 set laststatus =2)。
环绕(Surround)
- vim-surround:
ys/cs/ds快速添加、替换、删除成对包围符号,生态标准; - vim-sandwich:新一代环绕方案,支持操作符与文本对象两种文法;
- vim-operator-surround:将环绕能力封装为自定义操作符。
记笔记(Taking notes)
- vimwiki:本地 wiki 系统,支持链接、目录与 HTML 导出,笔记类用户的首选;
- vim-orgmode:Org-mode 核心功能(TODO、大纲、议程)的 Vim 移植;
- vim-dotoo:轻量 Org-mode 风格笔记;
- vim-journal:按日/周记录日志的极简方案;
- vim-notes:带全文检索的笔记系统;
- vim-pad:快速记录零散想法的便签式插件。
测试(Testing)
- vim-test:在 Vim 内一键运行测试,按文件类型自动选择测试框架,可与 tmux 集成。
文本对象(Text objects)
文本对象是 Vim 操作符文法(operator + text-object)的扩展点,能显著提升编辑效率:
| 插件 | 定位 |
|---|---|
| vim-textobj-user | 定义自定义文本对象的框架,是其他 textobj 插件的基础 |
| targets.vim | 增强内置文本对象,支持前后带引号/括号的精确选取 |
| vim-indent-object | 以缩进层级为单位的文本对象,Python 等缩进语言必备 |
| vim-exchange | 快速交换两处文本(如交换参数顺序) |
| vim-matchup | 现代版 % 配对跳转,支持 if/end 等结构配对 |
Tmux 集成
- vim-tmux-navigator:在 Vim 分屏与 tmux 窗格间无缝移动光标;
- vim-dispatch:将编译/测试任务分发给 tmux 或后台运行;
- tmux-complete.vim:从其他 tmux 窗格的缓冲区补全文本;
- vitality.vim:在 tmux 中同步正确的光标与配色行为。
撤销历史(Undo history)
配合 minimal-vimrc.vim 第 61-62 行的 set undofile 与 set undodir,可在会话间持久化撤销历史,使这些插件发挥最大价值。
版本控制(Version control)
| 插件 | 定位 |
|---|---|
| vim-fugitive | Git 集成的事实标准,提供 :Gstatus、:Gdiff、:Gbrowse 等命令 |
| vim-gitgutter | 侧边栏实时显示增删改标记 |
| vim-signify | 类似 gitgutter,但支持 SVN、Mercurial 等更多 VCS |
| gv.vim | Git log 可视化浏览 |
| gitv | 基于 fugitive 的 git log 增强 |
| agit.vim | 类 Magit 风格的 log 视图 |
| vimagit | Magit 风格的暂存/提交操作面板 |
| committia.vim | 提交信息编辑界面增强 |
| nerdtree-git-plugin | 在 NERDTree 中显示 git 状态图标 |
| gist-vim | 直接上传/下载 Gist |
| github-issues.vim | 在 Vim 内浏览 GitHub Issue |
| vim-github-dashboard | 查看 GitHub 动态与通知 |
| vim-twiggy | git branch 管理面板 |
| vim-lawrencium | Mercurial 集成 |
| vim-auto-programming | 基于 git 的自动补全历史代码 |
写作辅助(Writing)
- vim-wordy:检查并替换冗余、累赘的措辞;
- vim-textobj-quote:将直引号智能转换为成对弯引号;
- vim-grammarous:调用 LanguageTool 做语法检查;
- vim-LanguageTool:LanguageTool 客户端;
- thesaurus_query.vim:查询同义词词典;
- vim-online-thesaurus:在线同义词查询。
其他实用插件(Misc)
| 插件 | 定位 |
|---|---|
| goyo.vim | 专注写作模式,移除一切干扰 |
| limelight.vim | 高亮当前段落、淡化其余内容 |
| vim-startify | 启动页:最近文件、书签、会话 |
| vim-multiple-cursors 互补) | |
| vim-unimpaired | 成对的 [/] 快捷命令族 |
| vim-abolish | 大小写/单复数变体替换 |
| vim-rsi | Readline 风格的编辑键绑定 |
| vim-sleuth | 自动检测每个文件的缩进与 tab 配置 |
| vim-move | 用方向键整体移动文本行/块 |
| vim-qf | 快速修复(quickfix)窗口增强 |
| vim-projectionist | 按项目约定文件映射 |
| sideways.vim | 参数列表元素的左右移动 |
| splitjoin.vim | 单行/多行代码结构转换 |
| is.vim | 增量式搜索增强 |
| FastFold | 加速折叠更新 |
| NrrwRgn | 将选区在独立缓冲区中编辑后回写 |
| calendar.vim | Vim 内日历,可扩展其他日期应用 |
| vim-gnupg | 透明加解密 .gpg 文件 |
| vim-gutentags | 后台自动维护 ctags 标签库 |
| vim-devicons | 为文件类型提供图标字体 |
| vim-hackernews | 在 Vim 里浏览 Hacker News |
| vim-bracketed-paste | 智能粘贴模式,避免粘贴时错误缩进 |
| vim-diminactive | 淡化非活动窗口 |
| vim-diff-enhanced | 增强的 diff 算法与折叠 |
| unicode.vim | Unicode 字符查询与输入 |
| vim-fixkey | 修复终端功能键码 |
| CoVim | 协作编辑(实时共享光标与文本) |
四、By filetype:按语言类型配置插件
按文件类型组织插件,与 filetype plugin indent on(见 minimal-vimrc.vim 第 9 行)机制天然契合:插件可以在 ftplugin 目录下为对应语言提供专用设置。
C 和 C++
- a.vim:在
.c/.h之间快速切换; - clang_complete:基于 Clang 的语义补全;
- color_coded:用 Clang 实现更准确的语义高亮;
- lh-cpp:C++ 语法与工程辅助;
- vim-cpp-enhanced-highlight:C++11/14 关键字与运算符高亮增强;
- vim-rtags:对接 rtags 实现跨文件跳转。
Clojure
- vim-fireplace:REPL 交互式求值;
- vim-salve:Leiningen 项目导航;
- vim-sexp:S-expression 结构化编辑;
- vim-sexp-mappings-for-regular-people:面向普通用户的 sexp 映射;
- paredit:类 Paredit 的括号编辑;
- rainbow_parentheses.vim:括号按层级彩虹着色;
- vim-clojure-highlight:Clojure 语法高亮。
Elixir
- vim-elixir:Elixir 语法与文件类型支持;
- alchemist.vim:补全、文档与跳转;
- vim-mix-format:保存时用
mix format格式化代码。
Go
- vim-go:Go 全能插件,集成补全、跳转、格式化、运行测试;
- gofmt.vim:仅做 gofmt 格式化的极简方案;
- hl-goimport.vim:
goimports高亮与修正; - vim-godebug:Delve 调试集成。
值得注意的是 README.md 专门以 Go 为例说明"外部过滤器":gofmt 是官方提供的格式化过滤器,Go 插件的 :Fmt 命令本质上就是 :%!gofmt——将整个文件经 stdin 送入过滤器、再用 stdout 替换缓冲区。
HTML
Java
- vim-javacomplete2:Java 补全,支持类路径(classpath)解析。
JavaScript
| 插件 | 定位 |
|---|---|
| vim-javascript | 主流 JS 语法高亮与 indent |
| yajs.vim | ES6+ 语法高亮 |
| yats.vim | TypeScript 语法高亮 |
| vim-jsx | JSX 语法支持 |
| es.next.syntax.vim | ES.next 语法 |
| javascript-libraries-syntax.vim | 为常见 JS 库提供语法声明 |
| tern_for_vim | Tern 驱动的 JS 补全与跳转 |
| vim-flow | Flow 类型检查集成 |
| vim-prettier | Prettier 代码格式化 |
| vim-esformatter | esformatter 格式化 |
| vim-node | Node.js 开发工具(require 跳转、文档等) |
| node-vim-debugger | Node 调试器交互 |
Lua
- vim-lua-ftplugin:Lua 文件类型插件(补全、文档);
- vim-lua-inspect:Lua 静态分析。
PHP
- php.vim:PHP 语法与函数补全;
- vim-php-cs-fixer:php-cs-fixer 代码风格修正;
- vim-php-namespace:自动插入 use 与 namespace;
- vim-php-refactoring-toolbox:PHP 重构命令集。
Python
| 插件 | 定位 |
|---|---|
| jedi-vim | Jedi 驱动的补全与跳转,Python 首选 |
| python-mode | 全功能 Python 插件包(补全、检查、折叠) |
| vim-flake8 | flake8 风格检查 |
| SimpylFold | 按 Python 缩进块折叠 |
| braceless.vim | 基于缩进的智能括号行为 |
| impsort.vim | import 排序 |
Rust
- rust.vim:Rust 官方语法与 rustfmt 支持;
- vim-racer:Racer 驱动的补全与跳转;
- vim-crates:检查并更新 Cargo.toml 中的依赖版本。
TeX
- vimtex:LaTeX 全流程支持:编译、正向/反向搜索、章节导航、片段。
VimL
| 插件 | 定位 |
|---|---|
| vim-scriptease | Vimscript 开发增强 |
| vim-lookup | 跳转到 Vimscript 函数定义处 |
| vader.vim | Vimscript 测试框架 |
| vim-themis | 另一个 Vimscript 测试框架 |
| exception.vim | Vimscript 异常调试辅助 |
| helpful.vim | 悬停显示内置函数帮助 |
五、从清单到配置:如何在仓库语境中落地
5.1 用 minimal-vimrc 打好地基
仓库提供了 minimal-vimrc.vim,它演示了"加载插件所需的基座设置",其中有几条与插件生态直接相关:
set nocompatible " 关闭 vi 兼容模式
filetype plugin indent on " 按文件类型加载插件与缩进规则
set runtimepath+=~/.vim/bundle/... " (Pathogen 风格需手动扩展 rtp)
其中 filetype plugin indent on 是插件按文件类型生效的前提:它让 Vim 在打开每种文件时查找并执行对应的 ftplugin 与 indent 脚本(详见 :h filetype)。第 61-62 行还设置了 undofile 与 undodir,这正是 Undo history 插件 发挥作用的持久化前提。
5.2 插件管理器的选择路线
结合 README 的 Managing plugins 与清单的 Plugin managers,推荐两条落地路线:
- 现代声明式路线:
vim-plug或dein.vim。在 vimrc 中声明插件列表,运行:PlugInstall/:PlugUpdate即可安装与升级,支持按需延迟加载; - 最小侵入路线:
vim-pathogen。它只把~/.vim/bundle/*加入 runtimepath,不提供安装命令,适合手控仓库(git clone)的用户; - 零第三方依赖路线:直接使用 Vim 8 原生的包管理(
:h pack-add)。README 的 Standard plugins 提到,Vim 自带的标准插件有一部分放在$VIMRUNTIME/pack/dist/opt,需通过:packadd按需加载(例如 matchit 的启用方式是packadd! matchit,见 README.md)。
5.3 标准插件:清单之外的"隐形插件"
在配置外部插件之前,可以先了解 Vim 自带的 标准插件:它们默认加载但多数用不上,可用 let g:loaded_<plugin> = 1 禁用。下表列出了 README 给出的禁用方式:
| 插件 | 禁用方式 | 帮助 |
|---|---|---|
| 2html | let g:loaded_2html_plugin = 1 |
:h 2html |
| getscript | let g:loaded_getscriptPlugin = 1 |
:h pi_getscript |
| gzip | let g:loaded_gzip = 1 |
:h pi_gzip |
| logipat | let g:loaded_logipat = 1 |
:h pi_logipat |
| matchparen | let g:loaded_matchparen = 1 |
:h pi_paren |
| netrw | let g:loaded_netrwPlugin = 1 |
:h pi_netrw |
| rrhelper | let g:loaded_rrhelper = 1 |
:e $VIMRUNTIME/plugin/rrhelper.vim |
| spellfile | let g:loaded_spellfile_plugin = 1 |
:h spellfile.vim |
| tar | let g:loaded_tarPlugin = 1 |
:h pi_tar |
| vimball | let g:loaded_vimballPlugin = 1 |
:h pi_vimball |
| zip | let g:loaded_zipPlugin = 1 |
:h pi_zip |
被禁用的插件在 :scriptnames 中仍会显示为已 source,但只会读取开头几行即退出,其余代码(映射、命令、逻辑)不会执行。
六、挑选与维护插件栈的实用准则
- 先看社区验证:按 CONTRIBUTING.md 的标准,优先选择"已经积累了若干 star"的项目,新插件数量庞大,作者无法逐一测试,社区认可度是最实用的筛选器;
- 核对编译特性:安装 Command-T、denite.nvim、LeaderF 等插件前,确认 Vim 是否带
+ruby/+python3(用:version查看); - 关注依赖声明:vimfiler.vim、neosnippet.vim、vim-snipmate 等标注了"依赖其他插件",安装时需一并装齐;
- 按需组合而非堆砌:补全可从"框架 + LSP"与"引擎式"两条路线中选一(如 asyncomplete + vim-lsp,或 coc.nvim、YouCompleteMe);导航可在"文件树 + 模糊查找"里各取其一,避免功能重叠;
- 利用仓库持续学习:PLUGINS.md 与 README.md 是配套资源,插件出问题时的调试方法(
:scriptnames、Profiling startup time 一节等)都能在 README 中找到对应章节,二者合起来构成一套完整的"装插件 → 用插件 → 调插件"闭环。
结语
PLUGINS.md 的价值不在于"越多越好",而在于它把 Vim 插件生态按颜色主题、功能主题、文件类型三个维度组织成一张可检索的地图。结合 README.md 的插件管理原理与 minimal-vimrc.vim 的基座配置,你可以根据自己的语言栈与工作流,从这份清单中挑选出真正需要的少数几个插件,组装出一套克制、高效、可解释的 Vim 配置。