如何让coc.nvim自动补全中Tab键从首个条目开始导航?
让CoC补全中
<Tab>从首个条目开始遍历并保留补全窗口 问题描述
我当前用以下Vim配置实现CoC自动补全的导航功能:
function! CheckBackspace() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction inoremap <silent><expr> <Tab> \ coc#pum#visible() ? coc#pum#next(1) : \ CheckBackspace() ? "\<Tab>" : \ coc#refresh()
现在的问题是:补全菜单弹出后,按<CR>可以完成首个条目,按<Tab>只能切换到其余条目。我希望<Tab>从首个条目开始生效——即第一次按<Tab>就完成首个条目的补全,同时不关闭补全窗口,多次按下可以遍历并完成后续条目。
解决方案
修改<Tab>的映射逻辑,利用CoC提供的coc#pum#confirm()函数并传入{'stay': 1}参数(确认补全后保持补全窗口打开),同时结合coc#pum#next(1)切换到下一个条目。调整后的完整配置如下:
function! CheckBackspace() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction inoremap <silent><expr> <Tab> \ coc#pum#visible() ? coc#pum#confirm({'stay': 1}) . coc#pum#next(1) : \ CheckBackspace() ? "\<Tab>" : \ coc#refresh()
逻辑说明
- 当补全菜单(PUM)可见时,先调用
coc#pum#confirm({'stay': 1})完成当前选中条目的补全,同时保持补全窗口不关闭; - 接着调用
coc#pum#next(1)自动切换到下一个补全条目; - 重复按
<Tab>就会依次完成后续条目的补全,直到遍历完所有条目; - 若补全菜单未打开,仍保留原有的空格判断和补全触发逻辑。
内容的提问来源于stack exchange,提问作者Richard Vock
相关产品推荐
相关产品推荐

