我如何设置 vim 来实现这样的自动完成?

我如何设置 vim 来实现这样的自动完成?

我想要的是以下内容:

  1. 按完成TAB我正在写的当前单词,最长公共前缀,仅此而已。我也不想循环浏览任何选项,TAB最好再次按下以返回原始字符串,如果不可能的话,则什么也不做。

  2. 按下CTRL+SPACE应该会弹出一个菜单,显示所有可能的补全,就像默认的 vim 一样。

这可能吗?我发现在编程时循环浏览选项/打开菜单对我来说非常分散注意力,并鼓励这种行为继续循环并希望我所寻找的完成就在那里。

答案1

对于最长的公共文本,使用

:set completeopt+=longest

为了避免显示任何其他匹配项:

:set completeopt-=menu

<C-N>/<C-P>仍将显示其他匹配项;学会使用<C-E>来停止完成并返回到最初输入的文本。

对于映射:

function s:EnableCompleteMenu()
    set completeopt+=menu
    return ''
endfunction
inoremap <expr> <SID>EnableCompleteMenu s:EnableCompleteMenu()
inoremap <script> <C-Space> <SID>EnableCompleteMenu<C-N>

您还可以使用它<C-P>来显示另一个方向的匹配项。请注意,映射<C-Space>可能仅在 GVIM 中有效。如果您想将其与上面的命令一起使用,则需要编写类似的包装器(使用:set completeopt-=menu)并用它来重载其他完成命令(<C-N>等)。

相关内容