输入时,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