Vim 补全系统:关键字 / 行 / 文件 / 全能补全
更新时间:2026-08-30。本文是
languages/vim/主题高手层第 2 篇(A2:PlantUML + 机制 + ≥2 实测 + ≥2 交叉引用)。
本文要回答的问题
- 插入模式下有哪些补全键?分别补全什么?
Ctrl-n/Ctrl-p和 omni 补全区别在哪?- 现代 LSP 补全和 Vim 原生补全是什么关系?
一、机制:插入模式下的补全菜单
在插入模式按 Ctrl-x 进入补全子模式,再跟一个键选择补全源。弹出的菜单用 Ctrl-n/Ctrl-p 上下选,Enter 确认,Ctrl-e 取消。
二、各类补全与实测
| 触发 | 补全源 | 场景 |
|---|---|---|
Ctrl-n / Ctrl-p | 当前缓冲区关键字 | 重复本文件出现过的词(最常用) |
Ctrl-x Ctrl-l | 整行 | 复制上一行结构 |
Ctrl-x Ctrl-f | 文件名 | 输入路径 |
Ctrl-x Ctrl-] | 标签(tags) | 跳函数定义名 |
Ctrl-x Ctrl-o | omni 全能补全 | 语言语义补全(需 ftplugin 支持) |
实测:写 C 时输入 pri 再 Ctrl-n,会列出本缓冲里的 printf priority 等;输入 #include " 后 Ctrl-x Ctrl-f 直接补全头文件路径。
三、omni 全能补全(语义级)
Ctrl-x Ctrl-o 调用 &omnifunc,由对应文件类型的插件提供语义补全(如 C 的 ccomplete、Python 的 pythoncomplete)。它比纯关键字补全聪明,能按上下文给成员列表。
vim
set omnifunc=pythoncomplete#Complete " Python 示例(现代多用 LSP 替代)四、LSP 时代:补全交给语言服务器
原生 omni 依赖各语言单独实现、覆盖有限。现代做法是用 LSP(Neovim 内置 vim.lsp,或 Vim + 插件),补全、跳转、诊断统一由语言服务器提供,见 LSP 集成。原生补全仍能作为无 LSP 时的兜底。
五、与金字塔衔接
一句话总结
插入模式 Ctrl-x 进补全:Ctrl-n/p 补本缓冲关键字(最常用)、Ctrl-f 补文件名、Ctrl-o 补语义;原生 omni 是兜底,现代补全交给 LSP(见专家篇)。
上一篇:Vim 文本对象与运算符深挖 下一篇:Vim 折叠