3

vim 的默认行为是写下它找到的第一个匹配项并显示一个下拉菜单和所有其他匹配项。当我使用它来自动完成代码内容(例如库中的函数名称)时,使用它通常很尴尬,因为它会选择最长的单词并下拉一个长列表,这需要花费太多精力来删除一半单词或手动搜索相似词的菜单。

示例:我使用 OpenCV,当我编写cvCr(<Ctrl-x><Ctrl-o>)它时,它会写入cvCreate2DHMM并显示一个菜单,其中包含大约 20-30 个东西,所有内容都以cvCreate. 然后我必须删除一半的单词或在菜单中手动搜索。

有一种简单的方法可以改变这种行为,只写下最长的常见匹配,就像大多数 IDE 一样(它在手册中,我知道如何找到它)。

但是,当我<Ctrl-x>s用来修复拼写错误时,我更喜欢默认行为。

有没有办法为不同的自动完成分别设置行为?

4

1 回答 1

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>
于 2013-01-03T11:46:32.320 回答