Vim 补全 - 使用 Enter 键选择建议后始终抑制换行符

Vim 补全 - 使用 Enter 键选择建议后始终抑制换行符

有时,当我使用 Enter 键选择建议(从按 Ctrl-N 时出现的完成弹出窗口中)后,Vim 会插入一个换行符,并且光标会移动到下一行。这种情况并不总是发生 - 似乎 Vim 试图对此保持聪明,并且只有当它认为这是我想要的时才会将我移动到下一行。

但是,我想禁用此行为(因为它并不总是很智能),这样我总是必须通过手动按下 Enter 键来移动到下一行。这可能吗?

答案1

在使用插入补全时,Vim 对您输入 <Enter> 键的响应取决于补全菜单的状态。菜单的行为如下所述:

:help ins-completion-menu

下一节将介绍使用插入完成时各种键的行为,

:help popupmenu-keys

其中解释了 <Enter> 键的行为取决于菜单状态。据我了解,输入 <Enter> 会插入换行符,除非您使用光标键从菜单中选择了匹配项。

当您不想插入换行符时,避免插入换行符的最佳方法是使用其他键(例如 Ctrl-Y 或 Ctrl-E)终止或进行选择。

也可以看看

:help complete_CTRL-Y

对于插入模式完成的整个描述,

:help ins-completion

答案2

您可以将此映射添加到您的 .vimrc 文件:

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

当弹出菜单可见时,它将在插入模式下将回车键映射到输入 CTRL-Y。CTRL-Y 选择菜单中当前选定的项而不输入新行。否则,它将使回车键像平常一样起作用。

答案3

我将其添加到 .vimrc 中,现在它的行为符合我的要求:

noremap pumvisible() ? "\" : " "

相关内容