跳转到特定自动完成选项的更快捷方式

时间:2011-09-30 22:24:57

标签: vim autocomplete

在我的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很糟糕。有人有更好的方法吗?

2 个答案:

答案 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插件感兴趣