如何获取命令完成列表

时间:2014-01-14 15:43:47

标签: vim

我创建了联合源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

1 个答案:

答案 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']