有时,当我使用 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() ? "\" : " "