☰
深度定制 tern_for_vim:10 个 g:tern_ 配置选项让你彻底掌控插件行为
2026/10/11 19:11:43 网站建设 项目流程
  • 开发工具

【免费下载链接】tern_for_vim

Tern plugin for Vim

项目地址:https://gitcode.com/gh_mirrors/te/tern_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 支持。

  1. 把仓库克隆到你的插件目录:

    git clone https://gitcode.com/gh_mirrors/te/tern_for_vim.git
  2. 进入插件根目录(即 package.json 所在目录),安装 Tern 服务器及依赖:

    npm install
  3. 重新打开 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

项目地址:https://gitcode.com/gh_mirrors/te/tern_for_vim
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询