【问题标题】:vim word complete, how to make the first one always as defaultvim word complete,如何使第一个始终为默认值
【发布时间】:2014-12-20 01:49:35
【问题描述】:

我在 vim 中使用了几个单词完成插件(word_complete.vim、autocomplpop、omnicppcomplete-0.41)。到目前为止,一切都很好。当我输入第一个字符时,它将弹出菜单让您选择要使用的单词

当我只输入 2 个字符时,vim 会将弹出菜单中的第一个单词设置为默认单词,然后你可以直接按 enter 使用该单词。

但问题通常是 2 个字符不足以缩小要完整的单词范围。我需要输入更多。在我输入超过 2 个字符后,默认选择的单词会消失,然后我必须使用 CTRL-N 或 CTRL-P 来选择单词,尽管它是弹出菜单中的第一个。

下面是我所拥有的: 第一个是我只输入 2 个字符时

但输入第三个字符后,显示为:

虽然我要选择“airline_detect_whitespace”,但我仍然需要输入 CTRL-N 来选择它。

我问有没有办法配置 vim 选择默认匹配器的方式? 例如,我想在默认选择的单词消失之前输入 5 个字符。 或者有没有办法让弹出菜单中的第一个默认选择?

谢谢。

【问题讨论】:

    标签: vim


    【解决方案1】:

    查看 Vim Tips Wiki 上的 Make Vim completion popup menu work just like in an IDE 页面。它描述了实现此目的的设置。特别是这些映射应该创建您想要的行为:始终预先选择一个菜单条目。

    inoremap <expr> <C-n> pumvisible() ? '<C-n>' :
    \ '<C-n><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'
    
    inoremap <expr> <M-,> pumvisible() ? '<C-n>' :
    \ '<C-x><C-o><C-n><C-p><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'
    

    【讨论】:

    • 我试过这个,但它不起作用。感谢您指出我要去的方向。
    【解决方案2】:

    这三个插件具有重叠的功能,并且弹出菜单和自动命令等的映射肯定存在冲突。

    例如,AutoComplPop 以更智能、更自动化的方式完成 wordcomplete 所做的所有事情。 OmniCPPComplete,比 Vim 中的默认算法(以及 AutoComplPop 的算法)具有明显更好的 C++ 补全算法,并且可以设置为不执行自动补全。

    我建议您从配置中删除 wordcomplete,禁用 OmniCPPComplete 的“可能完成”功能,并让 AutoComplPop 处理问题的“自动完成”方面。

    【讨论】:

    • 现在,我删除了 word_complete.vim,问题仍然存在。无论如何,我不想禁用“可能完成”功能,因为我确实需要该功能。
    • 好吧,你有三个插件都以稍微不同的方式做同样的事情。其中一个或组合会给您带来不良影响,因此在询问陌生人之前要做的第一件事是二进制搜索以确定问题的根源。你这样做了吗?
    • 感谢您的回复。现在我只剩下 AutoComplPop 了。问题仍然存在。我需要深入研究。
    猜你喜欢
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多