Vim 完成 - 在我使用 Enter 键选择建议后始终禁止换行

11 vim autocomplete

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

但是,我想禁用此行为(因为它并不总是很聪明),以便我始终必须通过手动按 Enter 键自己移动到下一行。这可能吗?

gar*_*ohn 14

在使用插入完成时,Vim 对您输入 <Enter> 键的响应取决于完成菜单的状态。此处描述了菜单的行为:

:help ins-completion-menu
Run Code Online (Sandbox Code Playgroud)

使用插入完成时各种键的行为将在下一节中描述,

:help popupmenu-keys
Run Code Online (Sandbox Code Playgroud)

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

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

也可以看看

:help complete_CTRL-Y
Run Code Online (Sandbox Code Playgroud)

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

:help ins-completion
Run Code Online (Sandbox Code Playgroud)


Jak*_*ake 5

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

inoremap <expr> <CR> pumvisible() ? "\<C-Y>" : "\<CR>"
Run Code Online (Sandbox Code Playgroud)

当弹出菜单可见时,它将插入模式下的返回键映射到输入CTRL-Y。CTRL-Y 选择菜单中当前选定的项目而不输入新行。否则它会使返回键正常工作。