5

coc.nvim 补全常见问题

 1 year ago
source link: https://blog.51cto.com/u_15773567/5688367
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

coc.nvim 补全常见问题

精选 原创

小二上酒8 2022-09-19 11:25:41 ©著作权

文章标签 vim 补全 c# 文章分类 Java 编程语言 阅读数168

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>")
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK