10

Иногда, после того, как я выбрал предложение (из всплывающего окна завершения, которое появляется при нажатии Ctrl-N) с помощью клавиши Enter, Vim вставит новую строку и курсор будет перемещен на следующую строку. Это не всегда происходит - кажется, что Vim пытается быть умным в этом и переместит меня на следующую строчку, только если решит, что это то, что я хотел бы.

Однако я хочу отключить это поведение (потому что оно не всегда умное), так что мне всегда придется самому переходить на следующую строку, вручную нажимая клавишу Enter. Это возможно?

3 ответа3

13

То, что Vim делает в ответ на то, что вы ввели клавишу <Enter> при использовании завершения вставки, зависит от состояния меню завершения. Поведение меню описано здесь:

:help ins-completion-menu

и поведение различных клавиш при использовании завершения вставки описано в следующем разделе,

:help popupmenu-keys

где это объясняет, что поведение клавиши <Enter> зависит от состояния меню. Насколько я понимаю, ввод <Enter> вставляет новую строку, за исключением случая, когда вы выбрали совпадение из меню с помощью клавиш курсора.

Лучший способ избежать вставки новой строки, когда она вам не нужна, - это завершить или сделать выделение, используя другую клавишу, например, Ctrl-Y или Ctrl-E.

Смотрите также

:help complete_CTRL-Y

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

:help ins-completion
4

Вы можете добавить это отображение в ваш файл .vimrc:

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

Он отобразит клавишу возврата в режиме вставки для ввода CTRL-Y, когда всплывающее меню станет видимым. CTRL-Y выбирает текущий выбранный пункт в меню без ввода новой строки. В противном случае ключ возврата будет работать как обычно.

0

Я добавил это в .vimrc, и теперь он ведет себя так, как я хочу:

noremap pumvisible()? "\": ""

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .