Vim 快速跳转到特定自动完成选项的方法

Vim 快速跳转到特定自动完成选项的方法,vim,autocomplete,Vim,Autocomplete,在我的Vim缓冲区的某个地方说我有以下内容: function foo() { return 'funday, funky, funnel cake'; } 现在我想在下面创建一个新函数 我开始键入fun,然后点击Tab键打开我的自动完成菜单。 在这个菜单中,我得到(按照这个假设的顺序): 通常,我会按住Ctrl+n键两次以突出显示函数,这没什么大不了的。。但是如果我有20个结果,我想很快得到第10个结果呢 是否有任何已知的方法(或插件)可以快速跳转到Vim自动完成菜单中的特定值 更

在我的Vim缓冲区的某个地方说我有以下内容:

function foo() {
    return 'funday, funky, funnel cake';
}
现在我想在下面创建一个新函数

我开始键入
fun
,然后点击Tab键打开我的自动完成菜单。 在这个菜单中,我得到(按照这个假设的顺序):

通常,我会按住Ctrl+n键两次以突出显示
函数
,这没什么大不了的。。但是如果我有20个结果,我想很快得到第10个结果呢

是否有任何已知的方法(或插件)可以快速跳转到Vim自动完成菜单中的特定值


更新: 使用黑客技术,我找到了一种通过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"))
“j/k用于自动完成菜单中的向上和向下
inoremap j((pumvisible())?(“\”):(“j”))
inoremap k((pumvisible())?(“\”):(“k”))
“黑客跳下x个位置
inoremap 2((pumvisible())?(“\”):(“2”))
inoremap 3((pumvisible())?(“\”):(“3”))
inoremap 4((pumvisible())?(“\”):(“4”))

然而,我的vimscript很恶心。有人有更好的方法吗?

也许你对插件感兴趣

至于快速跳转到特定的自动完成,我有以下工作流程

在我的.vimrc中:

set completeopt=最长,菜单单
longest
选项可防止自动选择第一个匹配项。这意味着Vim将等待您完成键入单词的其余部分,当您键入更多字符时,完成弹出窗口将自动缩小

在您的示例中,您可以键入
fun
,点击Tab,打开自动完成菜单。此时,您仍然会看到:

funday
funnel
function
funky
…但现在第一选择(funday)将不再自动选择。然后,您可以键入“c”,这会将列表缩小到:

function
无论如何,这是我所知道的最快的方法,使用纯Vim。我本人倾向于喜欢纯Vim解决方案。:)


EDIT:意识到我忘了在
.vimrc
文件的行末包含“menuone”。这会导致Vim显示自动完成菜单,即使只有一个匹配项。您需要在
set completeopt
行中选择“menuone”或“menu”,才能真正看到包含完成项的弹出窗口。

发现了这种在显示autocomplete时设置j和k的方法:仍然没有我希望的那么有效。不要这样认为,请通过执行
:help I\u CTRL-N
。。。
function