输入时,vim更新完成弹出窗口

输入时,vim更新完成弹出窗口,vim,omnicomplete,Vim,Omnicomplete,我试图在vim中使用complete(),以便它也读取值 例如,从vim的complete()示例 inoremap <F5> <C-R>=ListMonths()<CR> func! ListMonths() call complete(col('.'), ['January', 'February', 'March', \ 'April', 'May', 'June', 'July', 'August', 'September', \

我试图在
vim
中使用
complete()
,以便它也读取值

例如,从
vim
complete()
示例

inoremap <F5> <C-R>=ListMonths()<CR>

func! ListMonths()
  call complete(col('.'), ['January', 'February', 'March',
    \ 'April', 'May', 'June', 'July', 'August', 'September',
    \ 'October', 'November', 'December'])
  return ''
endfunc
inoremap=ListMonths()
func!列表月份()
调用完成(列('.'),['一月','二月','三月',
\‘四月’、‘五月’、‘六月’、‘七月’、‘八月’、‘九月’,
\“十月”、“十一月”、“十二月”])
返回“”
endfunc
如果我键入
,我将以弹出窗口的形式获得所有月份。现在,我想要的是,如果我输入“J”,只会显示一月、六月和七月,“Ju”将显示六月和七月,依此类推

我阅读了
vim文档
,并尝试了
完成检查
,但没有成功

另外,我尝试在
vimdoc
中使用示例
E839
,但我无法正确调用它,总是得到无效的参数


请向我建议键入时带有完成符的菜单的首选方法,以及如何使用该方法。

首先,该示例完成不考虑已键入的基,因为它总是在光标位置开始完成(通过
列('.')

其次,要获得“键入时优化列表”行为,需要以下设置:

:set completeopt+=longest

不幸的是,由于A、<代码>完成()/代码>不考虑<代码> 'TealEopt '/Cuth>选项。您必须改用

'completefunc'
,就像这个重写的示例:

fun! CompleteMonths(findstart, base)
    if a:findstart
        " locate the start of the word
        let line = getline('.')
        let start = col('.') - 1
        while start > 0 && line[start - 1] =~ '\a'
            let start -= 1
        endwhile
        return start
    else
        echomsg '**** completing' a:base
        " find months matching with "a:base"
        let res = []
        for m in ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
            if m =~ '^' . a:base
            call add(res, m)
            endif
        endfor
        return res
    endif
endfun
inoremap <F5> <C-o>:set completefunc=CompleteMonths<CR><C-x><C-u>
有趣!完成月(findstart,base)
如果a:findstart
“找到单词的开头
let line=getline('.'))
让start=col('.')-1
当start>0&&line[start-1]=~'\a'
让我们开始-=1
循环结束
回程起动
其他的
echomsg“*****正在完成”a:base
查找与“a:base”匹配的月份
让res=[]
在[‘一月’、‘二月’、‘三月’、‘四月’、‘五月’、‘六月’、‘七月’、‘八月’、‘九月’、‘十月’、‘十一月’、‘十二月’]中的m
如果m=~'^'。a:基地
呼叫添加(res,m)
恩迪夫
外循环
返回res
恩迪夫
结束
inoremap:set completefunc=CompleteMonths