2013-01-03 41 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>