You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Neovim插入模式按Tab触发ERROR 117故障求助

解决Neovim插入模式Tab键ERROR117失效问题

问题定位

ERROR 117属于Vim的「未知函数」错误,结合你的配置来看,大概率是Coc.nvim未正确初始化,或者Tab键映射与其他插件(如emmet-vim)冲突,导致插入模式下Tab触发了未定义的函数调用。

分步解决方案

1. 确认Coc.nvim安装状态

首先确保所有插件正常安装:

  • 在Neovim中执行:PlugInstall,等待所有插件安装完成
  • 重启Neovim,执行:checkhealth coc,检查输出中的错误提示(比如是否缺少Node.js,Coc服务是否正常启动)

    注意:Coc.nvim依赖Node.js,若未安装需先安装14.14及以上版本

2. 排查Tab键映射冲突

在插入模式下执行:verbose imap <Tab>,查看当前Tab键的映射来源:

  • 如果输出显示emmet-vim占用了Tab映射,说明Coc和emmet的Tab触发逻辑冲突
  • 解决冲突:修改emmet-vim的展开键,避免使用Tab,在你的配置中添加:
    let g:user_emmet_expandabbr_key='<C-e>'
    
    这样emmet会用Ctrl+e展开缩写,不再占用Tab键。

3. 修复Coc的Tab映射逻辑

你的Coc Tab映射中,未判断Coc服务是否就绪,当Coc未启动时调用coc#refresh()会触发ERROR117。修改映射代码:

inoremap <silent><expr> <TAB>
      \ pumvisible() ? "\<C-n>" :
      \ <SID>check_back_space() ? "\<TAB>" :
      \ coc#rpc#ready() ? coc#refresh() : "\<TAB>"

新增coc#rpc#ready()判断,当Coc未就绪时直接使用Tab键默认行为,避免报错。

4. 临时排查测试

如果以上步骤无效,可以逐步禁用插件排查:

  • 注释掉Plug 'mattn/emmet-vim',执行:PlugClean后重启Neovim,测试Tab是否正常
  • 若正常,说明是emmet与Coc的冲突,按步骤2处理即可
  • 若仍报错,注释掉Coc的Tab映射代码,测试Tab是否恢复,再逐步调试映射逻辑

内容的提问来源于stack exchange,提问作者Ferran Rojas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:32:33