在vim中为弹出菜单重新映射<c-n>和<c-p> </c-p> </c-n>

时间:2013-11-22 07:55:42

标签: vim

有两种方法可以在弹出菜单中选择候选。

1 <C-n> or <C-p>可以选择候选和自动填充关键字。

enter image description here

2 <Up> or <Down>选择候选人需要按Enter键才能完成。

您还可以在popupmenu-keys中阅读有关上下的链接。(this

enter image description here

我更喜欢<Up> or <Down>的行为,但我不喜欢在vim中按箭头。

我决定重新映射<C-n> or <C-p>,让<C-n> or <C-p>做同样的行为。

这是我的配置。

imap <expr><C-n> pumvisible() ? "\<Down>" : " \<C-n>"

imap <expr><C-p> pumvisible() ? "\<Up>" : " \<C-p>"


我用答案更改了我的配置。

我遇到两种情况。

1.使用<c-n>触发弹出菜单,效果很好。

2.要使用<c-x><c-p>触发弹出菜单,但事实并非如此。 <C-n> or <C-p>默认有效。

1 个答案:

答案 0 :(得分:2)

你的整个问题很难理解(即使在所有这些编辑之后;你也没有很好地解释你的尝试),但以下两件事情肯定是奇怪的:

:imap <expr><C-n> pumvisible() ? "\<Down>" : " \<C-n>"
  1. 使用<C-n>前面的空格字符,您将无法在现有基础上触发完成。它将始终插入一个空格,然后提供所有完成候选!
  2. 使用:imap(由于空格字符),这将成为递归映射,因此它将忙于等待。使用:inoremap
  3. 这就是:

    :inoremap <expr><C-n> pumvisible() ? "\<Down>" : "\<C-n>"
    

    对我来说效果很好(但我不知道这是否是你真正想要的)。