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,在你的配置中添加:
这样emmet会用let g:user_emmet_expandabbr_key='<C-e>'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
相关产品推荐
相关产品推荐

