使用'j'和'k'导航vim字完成

ker*_*ger 10 vim tab-completion

在vim中,我在插入模式下使用Ctrl-n来完成单词.如果有多个可能的匹配,我会得到一个下拉列表,我可以使用箭头键从中选择一个可能的匹配项.

但是,我不想使用箭头键; 我想使用'j'和'k'键.但是当我输入'j'或'k'时,它会插入字母,而不是在下拉列表中上下移动.有没有办法我可以按照我想要的方式配置vim?

Pi *_*ort 17

:hpopupmenu-keys.

弹出菜单子模式没有特殊的映射集,但您可以进行条件插入模式映射:

inoremap <expr> j pumvisible() ? "\<C-N>" : "j"
inoremap <expr> k pumvisible() ? "\<C-P>" : "k"
Run Code Online (Sandbox Code Playgroud)

这使得弹出菜单j/ k导航如<C-N>/ <C-P>,同时它是可见的.

附录:如果你希望能够在控制,以存放在您键入jk,你可以替换他们<C-J><C-K>分别.(参见mwcz对此答案的评论.)

  • 既然你已按下Ctrl键,我觉得使用`Cj`和`Ck`导航列表很方便.当列表打开时,它不会干扰继续输入:`inoremap <expr> <Cj> pumvisible()?"\ <CN>":"\ <Cj>"`和`inoremap <expr> <Ck> pumvisible()?"\ <CP>":"\ <Ck>"` (5认同)
  • 使用此方法时可能遇到的问题是他/她可能想要在调用完成菜单后继续键入并且他/她希望键入的字母是'j'或'k'.很高兴知道未来出现问题会带来什么后果. (4认同)
  • @tinifni可以使用`<Cv> j`和`<Cv> k`来完成它. (4认同)

Omn*_*ity 8

我不知道如何用j和k做到这一点.你处于插入模式,它们不起作用.

但是,我有另一种方式,Ctrl+ N与Tab相同,你可以使用Shift- Tab从列表中下来,然后选项卡上去.它比使用箭头键更容易.但不如j和k那么好.

或者你可以使用Ctrl+ NCtrl+P

  • 并且`CTRL-Y`接受,`CTRL-E`丢弃. (5认同)