如何在vim中重新映射自动完成?

时间:2013-06-11 12:06:17

标签: vim autocomplete

我正在使用带有omnifunc的AutoComplPop。

而不是输入自动完成自动完成弹出窗口中的选择,我想使用 Ctrl + Enter (或其他一些组合)并且 Enter 表现得像往常一样。

最后一点很重要:如果我想插入一个回车并且自动完成弹出窗口突出显示,我将不得不按两次输入。

所以:如何重新映射自动完成密钥?

1 个答案:

答案 0 :(得分:1)

我不认为AutoComplPop插件对 Enter 键执行任何操作;相反,这是完成弹出窗口可见时的默认行为。见:h popupmenu-keys

  The behavior of the <Enter> key depends on the state you are in:
  first state:      Use the text as it is and insert a line break.
  second state:     Insert the currently selected match.
  third state:      Use the text as it is and insert a line break.

默认情况下,AutoComplPop会选择第一个匹配项(内置完成项不会执行此操作)。

回答你的问题(虽然我没有完全得到你想要的行为):

弹出菜单没有特殊模式,您必须使用:help map-expr并使用pumvisible()检查弹出菜单。例如,要使<Enter>中止完成并插入换行符:

:inoremap <expr> <CR> pumvisible() ? '<C-e><CR>' : '<CR>'