【问题标题】:How to set different auto-completion behaviour in vim for different types of auto completions?如何在vim中为不同类型的自动完成设置不同的自动完成行为?
【发布时间】:2012-12-17 18:19:26
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: vim autocomplete omnicomplete


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 2014-02-19
      • 2015-01-14
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多