Я пытаюсь переназначить клавишу автозаполнения с клавиши «Ввод» на «TAB», потому что я продолжаю автозаполнение, когда собираюсь перейти к следующей строке. Приведенный ниже код является параметром по умолчанию для coc, и я думаю, что именно здесь я смогу переназначить ключ.
" make <CR> auto-select the first completion item and notify coc.nvim to
" format on enter, <cr> could be remapped by other vim plugin
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
\: "\<c-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
Я думал, что изменение <cr> в начале на <TAB> сработает. Однако, хотя он позволяет мне автозаполнять с помощью TAB, в некоторых случаях он создает странные автоматические отступы. Например:
//normal behavior
someFunction(){
//cursor here appropriately indented
}
//behavior after I made the changes mentioned above
someFunction(){
//cursor here}
Я предполагаю, что просто принципиально ничего не понимаю в coc или переназначении ключей в VIM.
Почему я не могу просто изменить этот <cr> на <TAB>? Как я могу переназначить клавишу автозаполнения с «Enter» на «TAB»?
Я не слишком хорошо разбираюсь в vimscript, но мне удалось заставить что-то работать методом проб и ошибок.
Настройки по умолчанию:
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
Автозаполнение на вкладке:
"This expression seems to be responsible for coc formatting on enter
inoremap <silent><expr> <cr> "\C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
"I this just says autocomplete with the first option if pop up menu is open.
"If it is not open, just do a regular tab.
inoremap <silent><expr> <TAB> pumvisible() ? coc#select_confirm() : "\<C-g>u\<TAB>"
Это должно быть coc#_select_confirm
для последней строки?
@sguan Ответ, который я опубликовал, работает для меня и позволяет мне автозаполнять TAB вместо ENTER. Я считаю, что coc#_select_confirm
— это функция, отвечающая за выполнение автозаполнения. Итак, я думаю, что последняя строка говорит на высоком уровне: если всплывающее меню автозаполнения открыто, выполните автозаполнение, иначе выполните обычную TAB.
Это не верно. Это должно быть _coc#_select_confirm
как сказал @sguan
Замените следующую строку из примера конфигурации coc
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
с этим:
inoremap <silent><expr> <TAB> coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<TAB>"
Это было основано на ответе @christofuy, но обновлено после изменения этой строки.
Я не знаю, поможет ли это, но вот часть моего vimrc, посвященная завершению coc: codeandbox.io/s/falling-butterfly-yejn1?file=/init.vim