vim的默认行为是记下它找到的第一个匹配项,并显示一个包含所有其他匹配项的下拉菜单。当我使用它来自动完成代码内容(比如来自库的函数名称)时,使用它通常很难,因为它选择了最长的单词并删除了一个很长的列表,需要花费太多精力来删除一半的单词或手动搜索类似单词的菜单。
示例:我使用OpenCV,当我写cvCr(<Ctrl-x><Ctrl-o>)
时,它会写cvCreate2DHMM
并显示一个包含大约20-30个内容的菜单,所有内容都以cvCreate
开头。然后我必须删除一半的单词或在菜单中手动搜索。
有一种简单的方法可以改变这种行为,只记下大多数IDE所做的最长的常见匹配(在手册中,我知道如何找到它)。
但是,当我使用<Ctrl-x>s
修复拼写错误时,我更喜欢默认行为。
有没有办法为不同的自动完成分别设置行为?
答案 0 :(得分:1)
您的意思是您想要从longest
选项切换'completeopt'
?
您必须覆盖完成触发器,并在前面添加一个无操作:map-expr
来更改选项,如下所示:
function! CompleteoptLongest( isEnable )
set completeopt-=longest
if a:isEnable
set completeopt+=longest
endif
return ''
endfunction
:inoremap <expr> <SID>CompleteoptLongestOn CompleteoptLongest(1)
:inoremap <expr> <SID>CompleteoptLongestOff CompleteoptLongest(0)
:inoremap <script> <C-n> <SID>CompleteoptLongestOn<C-n>
" Repeat for all other completion commands you use...
:inoremap <script> <C-x><C-s> <SID>CompleteoptLongestOff<C-x><C-s>