coc.nvim 补全常见问题
coc.nvim 是一个补全插件,它可以补全很多东西,比如:函数、变量、关键字、文件名、路径、标签、颜色、emoji 等等。
coc.nvim 0.0.82 开始使用自定义的补全菜单,而不是 vim 自带的 popupmenu,这样可以让补全菜单更加灵活,比如:可以使用图标、可以使用不同颜色等等。
以下是一些常见问题的解决方案。
禁用默认的选中补全项 默认的选中项可以更好支持 preselct,selection, virtual text 等功能,如果你不需要这些功能,可以在设置文件中添加:
"suggest.noselect": true,
选中项背景色设置 由于部分主题对 Pmenu 使用了高对比颜色,结果是其中内容高亮后显示效果很差,现在的 coc.nvim 会检测颜色对比度并自动设置默认值,如果你觉得效果不好,可以在 vimrc 中自定义 CocMenuSel :
hi CocMenuSel ctermbg=237 guibg=#13354A
切换选项时发生了预期外的行为 为了支持重做操作,coc.nvim 会在切换选项时使用 complete() 来插入 word,此时会触发 CompleteDone , 可以在 vimrc 文件中添加:
inoremap <silent><expr> <C-n> coc#pum#visible() ? coc#pum#next(0) : "\<C-n>"
inoremap <silent><expr> <C-p> coc#pum#visible() ? coc#pum#prev(0) : "\<C-p>"
来禁用掉切换时的插入,或者禁用插件监听 CompleteDone 事件的行为。
自定义补全项类型的图标 安装一个 nerd font 字体,设置 terminal 使用,然后设置文件中添加:
"suggest.completionItemKindLabels": {
"constructor": "\ufb25",
"keyword": "\uf1de",
"variable": "\ue79b",
"value": "\uf89f",
"operator": "\u03a8",
"function": "\u0192",
"reference": "\ufa46",
"constant": "\uf8fe",
"method": "\uf09a",
"struct": "\ufb44",
"class": "\uf0e8",
"interface": "\uf417",
"text": "\ue612",
"enum": "\uf435",
"enumMember": "\uf02b",
"module": "\uf40d",
"color": "\ue22b",
"property": "\ue624",
"field": "\uf9be",
"unit": "\uf475",
"event": "\ufacd",
"file": "\uf723",
"folder": "\uf114",
"snippet": "\ue60b",
"typeParameter": "\uf728",
"default": " "
}
补全菜单背景透明
neovim 中可以设置 set pumblend=15
补全菜单太长 vimrc 中设置 set pumheight=10
调整菜单中的选项 设置 suggest.formatItems,例如:
"suggest.formatItems": ["abbr", "menu", "kind"],
copilot.vim 提供选项时,无法使用 tab 切换 copilot.vim 对原生的 pumvisible() 进行了判定,所以你设置的 tab 可以正常工作,如果你需要 tab 优先执行切换选项,而不是完成 copilot 的选项,可以在 vimrc 中设置:
let g:copilot_no_tab_map = v:true
inoremap <silent><expr> <TAB>
\ coc#pum#visible() ? coc#pum#next(1):
\ exists('b:_copilot.suggestions') ? copilot#Accept("\<CR>") :
\ CheckBackSpace() ? "\<Tab>" :
\ coc#refresh()
推荐给 copilot 设置单独的按键,例如:
let g:copilot_no_tab_map = v:true
imap <silent><script><expr> <C-y> copilot#Accept("\<CR>")
版权声明
本文仅代表作者观点,不代表博信信息网立场。