Создание отображения для режима вставки, но не для автозаполнения

У меня есть сопоставления вставки в моем vimrc:

imap <C-e> <C-o>A
imap <C-a> <C-o>I

Они делают ctrl-a и ctrl-e перемещать курсор в начало и конец строки, не выходя из режима вставки, a la emacs keybindings.

Я только понял, что отображение <C-e> представляет конфликт с подмножеством автозаполнения. В документации для CTRL-E указано:

When completion is active you can use CTRL-E to stop it and go back to the
originally typed text.

Мое отображение <C-e> мешает этому. Есть ли способ, с помощью которого ctrl-e можно перейти в конец строки только в том случае, если автозаполнение неактивно?

Ответы

Ответ 1

Существует не разработанный способ проверить, Ctrl + X -компонентный режим активен или нет. Если один использует всплывающее меню, чтобы выбрать из списка доступных доработок, приемлемым решением может быть отображение

inoremap <c-e> <c-r>=pumvisible() ? "\<c-e>" : "\<c-o>A"<cr>

(особенно в случае menuone, установленном в опции completeopt.)

Общее решение может быть основано на побочном эффекте: в завершении subode, запрещается входить в режим Вставки рекурсивно (см. :helpgrep Note: While completion).

inoremap <c-e> <c-r>=InsCtrlE()<cr>
function! InsCtrlE()
    try
        norm! i
        return "\<c-o>A"
    catch
        return "\<c-e>"
    endtry
endfunction