Создание сопоставления для режима вставки, но не для подрежима автозаполнения - PullRequest
14 голосов
/ 03 августа 2011

У меня есть эти отображения режима вставки в моем vimrc:

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

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

Я только что понял, что отображение <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 Ответ

15 голосов
/ 03 августа 2011

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

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

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

Общее решение может быть основано на побочном эффекте: в подрежиме завершения запрещено входить в режим вставки рекурсивно (см. :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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...