【问题标题】:Faster way to jump to specific autocomplete option跳转到特定自动完成选项的更快方法
【发布时间】:2013-06-03 22:06:15
【问题描述】:

在我的 Vim 缓冲区的某处说我有以下内容:

function foo() {
    return 'funday, funky, funnel cake';
}

现在我想在这个下面创建一个新函数..

我开始输入 fun 并点击 Tab 以调出我的自动完成菜单。 在那个菜单中,我得到(按这个假设的顺序):

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

【问题讨论】:

  • 发现这种设置 j 和 k 的方法在显示自动完成时起作用:stackoverflow.com/questions/4739901/… 仍然没有我希望的效率。
  • 不这么认为,通过:help i_CTRL-N阅读了解它...

标签: vim autocomplete


【解决方案1】:

就快速跳转到特定的自动完成功能而言,我有以下工作流程。

在我的 .vimrc 中:

set completeopt=longest,menuone

longest 选项可防止自动选择第一个匹配项。这意味着 Vim 将等待您完成输入单词的其余部分,并且随着您输入单词的更多字符,完成弹出窗口会自动缩小。

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

funday
funnel
function
funky

...但是现在第一选择(funday)将不再被自动选择。然后您可以输入“c”,这会将列表缩小到:

function

无论如何,这是我所知道的最快的方式,使用纯 Vim。我自己更喜欢纯 Vim 解决方案。 :)

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

【讨论】:

    【解决方案2】:

    也许你对neocomplcache插件感兴趣

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多