Как переназначить ключ автозаполнения CoC VIM?

Я пытаюсь переназначить клавишу автозаполнения с клавиши «Ввод» на «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»?

Я не знаю, поможет ли это, но вот часть моего vimrc, посвященная завершению coc: codeandbox.io/s/falling-butterfly-yejn1?file=/init.vim

Zorzi 22.12.2020 13:13
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
5
1
8 552
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не слишком хорошо разбираюсь в 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 10.01.2021 07:44

@sguan Ответ, который я опубликовал, работает для меня и позволяет мне автозаполнять TAB вместо ENTER. Я считаю, что coc#_select_confirm — это функция, отвечающая за выполнение автозаполнения. Итак, я думаю, что последняя строка говорит на высоком уровне: если всплывающее меню автозаполнения открыто, выполните автозаполнение, иначе выполните обычную TAB.

christofuy 11.01.2021 01:35

Это не верно. Это должно быть _coc#_select_confirm как сказал @sguan

Natan Fernandes 03.03.2022 23:06

Замените следующую строку из примера конфигурации 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, но обновлено после изменения этой строки.

Другие вопросы по теме