Довольно раздражающей особенностью vim является то, что если вы находитесь в режиме вставки и выполняете автозаполнение (Ctrl-N), нажмите клавишу со стрелкой вниз до нужного элемента и нажмите клавишу Enter, затем он вставляет элемент, но также вставляет новую строку, которую вы затем придется удалить.
Есть ли способ выбрать элемент из списка автозаполнения, не получая дополнительный нежелательный перевод строки?
vim
autocomplete
Тайлер Дурден
источник
источник
Ответы:
Это зависит от того, в каком состоянии всплывающего меню вы находитесь (см.
:help popupmenu-completion
). Из вашего вопроса я понимаю, что вы находитесь в состоянии 2 (так как вы нажали клавиши со стрелками, чтобы найти завершение). Однако поведение по умолчанию Enterв состоянии 2 - вставить завершение без перевода строки; обычно вы описываете поведение состояния 1 (когда вы используете Ctrl+ N/ Ctrl+ P.)Способ, который работает последовательно во всех штатах, это использовать Ctrl+ Y. Мне нравится вспоминать «Y» как «да, прими это слово». Также можно просто начать печатать текст, который должен идти после завершенного слова, если вы не переназначили вещи, как в ответе geedoubleya.
В том же контексте вы можете нажать Ctrl+, Eчтобы отменить меню и оставить текст таким, каким он был до его вызова. Если вы привыкли к сочетаниям Ctrl+ Eи Ctrl+ Yв других контекстах (например, для прокрутки вверх или вниз в обычном режиме или для вставки символа ниже или выше курсора в режиме вставки), это один из способов запомнить это здесь. Я думаю, вы также можете думать об этом, как о «выходе» из меню или что-то подобное.
Смотрите
:help popupmenu-keys
больше.источник
Лично я использую это:
Любой, кто использует плагин CtrlP, может найти это отображение удобным.
источник
Я знаю, что это старый, но отчасти отвратительный ответ на ответ Гедублеи, поскольку, хотя ответ Эхристоферсона был информативным и удивительным, если кто-то хочет быстрого и грязного решения:
источник
В качестве альтернативы использованию клавиш со стрелками, используйте клавиши
j
&k
для прокрутки списка автозаполнения.Это изменяет текущую строку в соответствии с выбранным словом при прокрутке.
Поэтому вам не нужно нажимать клавишу ввода, поскольку курсор находится в режиме вставки в конце замещенного слова.
Чтобы включить это, добавьте это в ваш .vimrc (Спасибо другим в stackoverflow):
Отдельно, вместо использования клавиш со стрелками, вы можете просто повторить то,
Ctrl-n
что будет прокручивать опции (Ctrl-p
переходить назад), и подставлять текущую строку по мере ее перемещения, без необходимостиEnter
отображений клавиш vim.источник