如何解决 vim 与 coc 的键绑定冲突?

如何解决 vim 与 coc 的键绑定冲突?

只是作为前言,我不是一名程序员,但是我编写了一些 shell 来实现自动化。

这是在 MacOS Mojave 上,但它不应该产生太大的差别,因为 neovim 的配置应该可以延续。

我注意到,当我尝试使用 coc 的自动完成功能时,按 Enter 只会返回下一行,而不是选择自动完成。我怀疑它与 vimwiki 或 markdown 有关。我查看了此主题尝试找到冲突的键绑定,并:verbose imap <cr>在尝试自动完成后在输出中得到了此信息:

i  <CR>        &@<C-]><Esc>:VimwikiReturn 1 5<CR><SNR>38_AutoPairsReturn
        Last set from ~/.config/nvim/plugged/auto-pairs/plugin/auto-pairs.vim line 662
i  <CR>        * pumvisible() ? "\<C-Y>" : "\<CR>"
        Last set from ~/.config/nvim/init.vim line 225
Press ENTER or type command to continue

所以我查看了一下auto-pairs.vim,发现了这个:

execute 'inoremap <script> <buffer> <silent> <CR> .old_cr.'<SID>AutoPairsReturn'

在我看来,它比重新映射更受青睐init.vim

inoremap <expr><cr> pumvisible() ? "\<C-y>" : "\<CR>"

我试图找出这个pumvisible()函数的位置,但找不到它的定义。我想我可以通过对它进行一些操作来停止自动配对中的绑定。然后我尝试更改 中的重新映射init.vim。它实际上什么也没做,我将其更改<cr><Space>和 ,<Right>但这产生了多米诺骨牌效应,使我的箭头键在任何情况下都像回车键一样。

我该如何解决此冲突?如果我必须编辑插件文件(我正在使用 vim-plug),那么我该如何干净地完成此操作(以便它不会在更新时中断)?

谢谢。如果有必要,我可以init.vim在 github 上提供完整的或我的整个 neovim 配置。

答案1

vimwiki 中的 tab 键映射也与我的 coc.nvim 自动完成功能冲突,请将其添加到你的 init.vim 中

au filetype vimwiki silent! iunmap <buffer> <Tab>

答案2

我改变了 COC 设置的映射

inoremap <silent> <expr> <C-End> pumvisible() ? coc#_select_confirm() : "<Cg>u<CR><cr>=coc#on_enter()<CR>"

现在我按 ctrl + end 进行选择

相关内容