Завершення Vim - завжди придушуйте новий рядок після того, як я виберу пропозицію клавішею Enter


11

Іноді, коли я виберу пропозицію (із спливаючого вікна завершення, який з’являється при натисканні клавіші Ctrl-N) за допомогою клавіші Enter, 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 pumvable ()? "\": ""

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.