2013-01-03 35 views
2

VIM的默认行为是写下来才发现的第一场比赛,并显示一个下拉菜单与所有其他。当我用它来自动完成代码的东西(比如从库函数名)它往往是很难使用,因为它选择了最长的单词,并落下一个长长的清单是花费太多精力,从而删除一半的单词或手动搜索类似单词的菜单。如何在vim中为不同类型的自动完成设置不同的自动完成行为?

示例:我使用OpenCV,当我写cvCr(<Ctrl-x><Ctrl-o>)时,它写入cvCreate2DHMM并显示一个菜单,其中包含约20-30个事物,全部以cvCreate开头。然后,我必须删除一半的单词或在菜单中手动搜索。

有一种微不足道的方法来改变这种行为,只写下像大多数IDEs那样的最长的通用匹配(这是在手册中,我知道如何找到它)。

然而,当我使用<Ctrl-x>s修复拼写错误,我更喜欢的默认行为。

有没有办法为不同的自动补全单独设置的行为?

回答

1

你的意思是你想切换从'completeopt'选项longest

你不得不重写完成触发,并在前面加上一个空操作: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>