Завершение Vim - всегда подавлять перевод строки после выбора предложения с помощью клавиши Enter


11

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

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

Ответы:


14

То, что 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 выбирает выбранный в данный момент пункт меню без ввода новой строки. В противном случае ключ возврата будет работать как обычно.


1
Можете ли вы объяснить, что делает этот код и как он решает проблему, заданную ФП? Необъяснимый код может показаться ненадежным и опасным для пользователей.
BwDraco

0

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

noremap pumvisible ()? "\": ""

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.