我想要的是以下内容:
按完成TAB我正在写的当前单词,最长公共前缀,仅此而已。我也不想循环浏览任何选项,TAB最好再次按下以返回原始字符串,如果不可能的话,则什么也不做。
按下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>
等)。