我创建了联合源cmdmatch,它可以让你模糊完整的wildmenu项目。我想找到一个更好的方法来获取完成列表(我使用的方法是here并且有问题,因为有大量的完成项目屏幕将被完全填满[看看为什么只按{{1}如果你没有重新映射:<c-a>
])
另一个解决方案是在我抓住列表时完全隐藏vim的cmd行虽然我认为vim不可能(或者至少限制它显示的文本量因此它不会填满屏幕)。有什么想法吗?
修改
首次尝试具有相同的闪烁问题,尽管看起来效果更快
<c-a>
结果可以看作:
fu! GetCompletion(input)
call feedkeys(":" . a:input . "FF\<esc>\<cr>")
endf
cno FF <C-A><C-\>eg:Save()<CR>
fu! g:Save()
let g:x = getcmdline()
endf
:call GetCompletion('help a')
解
:echo x
测试:let g:cmdmatch = {}
fu! g:cmdmatch.set_c( base ) dict
let self.c = a:base
endfu
fu! GetCommandCompletion( base )
cno [MATCH] <c-a><c-\>eg:cmdmatch.set_c(getcmdline())<cr>
sil! exe 'norm :' . a:base . '[MATCH]'
cu [MATCH]
retu g:unite_cmdmatch.c
endf
答案 0 :(得分:2)
诀窍是用:silent
执行整个完成,这样输出实际上不会发生(但完成仍然神奇地完成)。以下函数通过触发完成然后将输出包装在:return split('...')
中来检索已解析为List的完成。当然,如果您需要一个字符串,也可以:return '...'
。
function! GetCommandCompletion( base )
silent execute "normal! :" a:base . "\<C-a>')\<C-b>return split('\<CR>"
endfunction
:let cmds = GetCommandCompletion('no')
:echo cmds
['noautocmd', 'nohlsearch', 'noreabbrev', 'noremap', 'noremenu', 'normal']