在我的Vim缓冲区中的某个地方说我有以下内容:
function foo() {
return 'funday, funky, funnel cake';
}
现在我想在此下面创建一个新功能..
我开始输入fun
并点击标签以显示我的自动完成菜单。
在那个菜单中,我得到了(按照这个假设的顺序):
funday
funnel
function
funky
通常情况下,我会 Ctrl + n 两次以突出显示function
,这不是什么大问题......但是,如果我有20个结果,我想第10个结果非常快。
是否有任何已知的方法(或插件)可以快速跳转到Vim自动完成菜单中的特定值?
更新 使用hack,我找到了一种通过X自动完成选项跳转的方法:
" j/k for up and down in autocomplete menu
inoremap <expr> j ((pumvisible())?("\<C-n>"):("j"))
inoremap <expr> k ((pumvisible())?("\<C-p>"):("k"))
" Hack to jump down x positions
inoremap <expr> 2 ((pumvisible())?("\<C-n><C-n>"):("2"))
inoremap <expr> 3 ((pumvisible())?("\<C-n><C-n><C-n>"):("3"))
inoremap <expr> 4 ((pumvisible())?("\<C-n><C-n><C-n><C-n>"):("4"))
然而,我的vimscript很糟糕。有人有更好的方法吗?
答案 0 :(得分:3)
就快速跳转到特定的自动填充,我有以下工作流程。
在我的.vimrc中:
set completeopt=longest,menuone
longest
选项可防止自动选择第一个匹配项。这意味着Vim将等待您完成输入单词的其余部分,并且当您键入单词的更多字符时,完成弹出窗口将自动缩小。
在您的示例中,您可以输入fun
,点击标签,以显示自动完成菜单。此时,您仍会看到:
funday
funnel
function
funky
......但现在不再自动选择第一选择(基金)。然后,您可以键入“c”,这会将列表缩小为:
function
无论如何,这是我所知道的最快的方式,使用纯Vim。我自己喜欢纯粹的Vim解决方案。 :)
编辑:意识到我忘了在.vimrc
文件的行尾添加“menuone”。这会导致Vim显示自动完成菜单,即使只有一个匹配。你需要set completeopt
行中的“menuone”或“menu”才能真正看到带有完成的弹出窗口。
答案 1 :(得分:1)
也许您对neocomplcache插件感兴趣