gpt4 book ai didi

vim 在我输入时更新完整的弹出窗口

转载 作者:行者123 更新时间:2023-12-04 19:46:49 27 4
gpt4 key购买 nike

我正在尝试使用 complete()vim以便它也读取值。

例如,来自vimcomplete()例如,

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

如果我输入 <F5>我会弹出所有月份。现在,我想要的是,如果我键入“J”,将只显示一月、六月和七月,“Ju”将显示六月和七月,依此类推。

我读了vim-doc , 并尝试了 complete_check ,但事实并非如此。

此外,我尝试使用 omnicomplete示例 E839vimdoc ,但我无法正确调用它,总是得到无效参数。

请建议我在输入时完成菜单的首选方法,以及如何使用它。

最佳答案

首先,该示例补全不考虑已经输入的基数,因为它总是在光标位置开始补全(通过 col('.'))。

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

:set completeopt+=longest

不幸的是,由于 (long known) bug , complete() 不考虑 'completeopt' 选项。您必须改用 '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>

关于vim 在我输入时更新完整的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com