- 开发工具
【免费下载链接】tern_for_vim
Tern plugin for Vim
tern_for_vim是一个让 Vim 接入 Tern JavaScript 代码分析引擎的插件,提供语义自动补全、跳转定义、智能重命名等 IDE 级能力。本文将带你完整掌握它的10 个g:tern_配置选项,用最少的配置快速调出最顺手的行为。
一、tern_for_vim 是什么?它能做什么
普通 Vim 的自动补全只是"单词匹配",而 tern_for_vim 把补全升级到了语义级——Tern 服务器会真正解析你的代码,理解函数签名和变量类型。
安装后,你在 JS 文件中直接按Ctrl-x o即可触发全库智能补全,插件还内置了以下命令:
| 命令 | 作用 |
|---|---|
:TernDef | 跳转到光标处标识符的定义 |
:TernDoc/:TernDocBrowse | 查看文档(在浏览器中打开) |
:TernType | 查询标识符类型 |
:TernRefs | 列出所有引用位置 |
:TernRename | 跨文件重命名变量 |
完整的命令说明可参考插件自带文档 doc/tern.txt。
二、一键安装步骤:3 步跑起来
插件本身很轻量,真正干活的是 Node.js 端的 Tern 服务器,因此安装分两步走。
前置条件:Node.js + npm(全局安装,NVM 版本不可用,详见后文 FAQ)、Vim 7.3+ 且编译时启用了 python 或 python3 支持。
把仓库克隆到你的插件目录:
git clone https://gitcode.com/gh_mirrors/te/tern_for_vim.git进入插件根目录(即 package.json 所在目录),安装 Tern 服务器及依赖:
npm install重新打开 Vim 即可。插件通过 after/ftplugin/javascript_tern.vim 在打开 JS 文件时自动调用
tern#Enable()激活,无需手动初始化。
💡 核心逻辑都在 autoload/tern.vim,底层与 Tern 服务器的通信由 script/tern.py 完成(这就是为什么必须编译 python 支持)。
三、最快配置方法:先让补全跑起来
配置全部写在~/.vimrc中。10 个选项都有默认值,一个不写也能用,下面的顺序建议照着走:
" ① 默认键位映射(可选) let g:tern_map_keys = 1 let g:tern_map_prefix = '<LocalLeader>t' " ② 补全菜单显示函数签名 let g:tern_show_signature_in_pum = 1 " ③ 参数提示 let g:tern_show_argument_hints = 'on_hold' set updatetime=500 " ④ 关闭重命名/引用后的定位列表(可选) let g:tern_show_loc_after_rename = 0 let g:tern_show_loc_after_refs = 0另外别忘了在项目根目录建一个
.tern-project文件声明依赖库,Tern 才会"认识" jQuery、ES6 等符号,配置示例见 doc/tern.txt 的 USAGE 章节。
四、10 个 g:tern_ 配置选项完整清单
以下默认值均来自 autoload/tern.vim 中的源码,可放心覆盖。
1. g:tern_map_keys —— 一键启用默认快捷键
- 默认值:
0(关闭) - 类型:
0/1
设为1后,插件会按你自定义的前缀批量注册 9 个命令的快捷键,映射表定义在tern#DefaultKeyMap()(autoload/tern.vim):
| 按键(前缀+) | 命令 |
|---|---|
tD | :TernDoc |
tb | :TernDocBrowse |
tt | :TernType |
td/tpd/tsd/ttd | 定义跳转(编辑窗口 / 预览 / 分屏 / 新标签页) |
tr | :TernRefs |
tR | :TernRename |
2. g:tern_map_prefix —— 自定义映射前缀
- 默认值:
<LocalLeader>(在 vimrc 中用\或;之类单字符配置) - 类型:字符串
配合上一项使用。例如设g:tern_map_prefix = '<Leader>t'后,<Leader>ttd即在新标签页打开定义。修改前缀是避免与其他插件冲突的最快方法。
3. g:tern_show_argument_hints —— 函数参数提示
- 默认值:
'no' - 类型:
'no'/'on_move'/'on_hold'
调用函数时在状态栏底部实时显示参数列表,是"类 IDE"体验的核心。三种模式的差异(autoload/tern.vim):
| 值 | 触发时机 | 适用场景 |
|---|---|---|
'no' | 不显示 | 慢机器 / 大型代码库 |
'on_move' | 光标每移动一次 | 小项目,追求零延迟 |
'on_hold' | 光标停顿片刻后 | 推荐,兼顾流畅与提示 |
⚠️ 选'on_hold'时务必把updatetime从默认 4000ms 调低(如set updatetime=500),否则要等 4 秒才出提示。另外插入模式下看不到提示时,试试:set noshowmode。
4. g:tern_show_signature_in_pum —— 补全菜单显示完整签名
- 默认值:
0 - 类型:
0/1
设为1后,补全菜单的menu列不再只显示(fn)图标,而是展示完整函数签名——包含参数名、类型和是否可选,逻辑见 script/tern.py 的tern_asCompletionIcon()。这是新手最容易忽视、收益却最高的选项,强烈建议打开。
5. g:tern_set_omni_function —— 是否接管智能补全
- 默认值:
1 - 类型:
0/1
控制插件是否自动执行setlocal omnifunc=tern#Complete(autoload/tern.vim)。如果你同时装了别的 omnifunc 类插件想自己管理,可设为0关掉接管。
6. g:tern_request_timeout —— 请求超时时间
- 默认值:
1(秒) - 类型:数字(支持小数)
每次向 Tern 服务器发请求的超时上限,由 script/tern.py 读取。大型项目首次补全可能超时,可调到2~5。
7. g:tern_request_query —— 自定义请求参数
- 默认值:
{}(空字典) - 类型:字典
一个"万能旋钮":会把其中的键合进发给 Tern 的请求。目前对completions键生效,可以追加 Tern 补全协议支持的任意参数(script/tern.py),例如:
let g:tern_request_query = {'completions': {'caseInsensitive': v:true}}8. g:tern_show_loc_after_rename —— 重命名后显示位置列表
- 默认值:
1 - 类型:
0/1
:TernRename完成后会在 loclist 中列出所有被改名的位置,方便核对(script/tern.py)。若觉得打扰,设为0关掉。
9. g:tern_show_loc_after_refs —— 查引用后显示位置列表
- 默认值:
1 - 类型:
0/1
与上一项同源::TernRefs完成后用 loclist 展示引用位置(script/tern.py),设为0则静默。
10. g:tern#command(附赠项)—— 自定义 Tern 服务器启动命令
- 默认值:
["node", "<插件目录>/node_modules/tern/bin/tern", "--no-port-file"] - 类型:字符串数组
node 装在非默认路径、或你想全局安装 Tern 时,用它在~/.vimrc里覆盖启动命令(autoload/tern.vim):
let g:tern#command = ['/usr/local/bin/node', '/usr/local/bin/tern', '--no-port-file']配套还有g:tern#arguments(默认[]),用于追加额外启动参数。
五、进阶:用 .tern-project 教会 Tern 你的项目
g:tern_变量管的是插件行为,而.tern-project管的是Tern 的语言环境——两者配合才完整。在项目根目录创建它:
{ "libs": ["browser", "jquery", "es6"], "loadEagerly": ["src/main.js"], "plugins": { "requirejs": { "baseURL": "./", "paths": {} } } }libs:让 Tern 加载浏览器 / jQuery / ES6 等符号定义loadEagerly:启动时就解析的关键文件plugins:启用 requirejs 等解析插件
更多字段请参考 Tern 官方文档(项目 README.md 中有链接入口)。
六、常见问题速查
| 问题 | 解决办法 |
|---|---|
启动报tern requires python support | 重新编译 Vim,启用 python3 支持 |
| 命令找不到 node / 服务器起不来 | 用g:tern#command指定全局 node 绝对路径 |
| 用了 NVM 后插件失效 | 插件不经过 shell 执行 node,NVM 无效,必须全局安装 |
| 插入模式看不到参数提示 | :set noshowmode |
on_hold提示太慢 | set updatetime=500并调大g:tern_request_timeout |
| 补全菜单看不到类型图标 | 检查g:tern_show_signature_in_pum与.tern-project的 libs |
📌最后提醒:项目 README 中说明该仓库目前处于非活跃维护状态,升级 Tern 相关依赖前请先确认兼容性;日常使用中,上述 10 个g:tern_选项足以覆盖绝大多数定制需求。
<输出文章>
</输出文章>
</output_article>
</输出文章>
</输出文章> </输出文章> </输出文章> </output_article> </output_article> </输出文章> </output_article> </输出文章> </output_article> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </output_article> </输出文章> </output_article> </输出文章> </输出文章> </输出文章> </输出文章> </output_article> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </output_article> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </output_article> </输出文章> </output_article> </输出文章> </输出文章> </output_article> </输出文章> </输出文章> </output_article> </输出文章> </输出文章> </输出文章> </output_article> </输出文章> </输出文章> </输出文章> </输出文章> </output_article> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </输出文章> </output_article> </输出文章> </output_article> </输出文章> </output_article> </输出文章> </output_article> </输出文章> </output_article> </输出文章> </输出文章> </输出文章> </输出文章> </output_article> </输出文章> </输出文章> </输出文章> </output_article> </输出文章> </输出文章> </output_article> </输出文章> </输出文章> </output_article> </输出文章> </output_article> </output_article> </输出文章> </输出文章> </输出文章> </output_article> </输出文章> </输出文章> </输出文章> </输出文章>
- 开发工具
【免费下载链接】tern_for_vim
Tern plugin for Vim
相关推荐
MyComputerManager深度解析:10个实用技巧帮你彻底掌控电脑
MyComputerManager深度解析:10个实用技巧帮你彻底掌控电脑 还在为"此电脑"里那些删不掉的流氓快捷方式烦恼吗?🤔 MyComputerMana
桌面应用如何快速掌握Nullboard:极简看板工具的完整入门指南
如何快速掌握Nullboard:极简看板工具的完整入门指南 你是否厌倦了臃肿复杂的任务管理工具?Nullboard正是为追求简洁高效的用户设计的极简看板工具。这
10个强大功能让你彻底掌握VSCode Markdown编辑:vscode-markdown插件全解析
10个强大功能让你彻底掌握VSCode Markdown编辑:vscode markdown插件全解析 vscode markdown(Markdown All
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考