如何在没有弹出菜单的情况下在Vim中自动输入自动完成项

如何在没有弹出菜单的情况下在Vim中自动输入自动完成项,vim,neovim,Vim,Neovim,是否可以在不打开自动完成弹出窗口的情况下完成模式 例如,在这个typescript示例中,我输入的是道具 类型道具={ 孩子们:反应 } 我可以按打开全向菜单。如果第一个条目是ReactNode,我知道我需要它,那么我可以按下确认这个完成,我没有将noselect作为CompleteTop,因此第一个结果将被自动选择,从而导致 类型道具={ 子项:React.ReactNode } 太好了。但是,有没有一种方法可以忽略这个问题?也就是说,如果我确信自动完成菜单中出现的第一个条目就是我想要的条目,

是否可以在不打开自动完成弹出窗口的情况下完成模式

例如,在这个typescript示例中,我输入的是道具

类型道具={ 孩子们:反应 } 我可以按打开全向菜单。如果第一个条目是ReactNode,我知道我需要它,那么我可以按下确认这个完成,我没有将noselect作为CompleteTop,因此第一个结果将被自动选择,从而导致

类型道具={ 子项:React.ReactNode } 太好了。但是,有没有一种方法可以忽略这个问题?也就是说,如果我确信自动完成菜单中出现的第一个条目就是我想要的条目,我是否可以绑定到“继续”并完成第一个条目

我试过了

让completeopt=-菜单,nomenu inoremap是否可见?\:\\\ 这似乎选择了菜单项,但实际上并没有更新UI。我的状态栏显示为-Omni completion^O^N^P match 2 of 115,但autocomplete的第一个条目不是在光标处输入的,因为如果我手动输入了这些键,就会出现这种情况。你错过了关键的一步。当您按Ctrl+Y组合键,并且pumvisible为false时,会发生什么情况?Vim触发全向完成。然后,它在弹出菜单中选择下一个,显然是第二个条目。它不做任何其他事情。Vim没有完成完成,因为您没有告诉它。如果希望inoremap完成,那么它应该以结束

也就是说,如果completeopt不包括noselect,那么在重新映射中就不需要。添加将导致vim向下移动到菜单中的第二个选择。将noselect添加到completeopt或从重新映射中删除。如果没有noselect,您的重新映射应该是:

inoremap <expr> <c-y> pumvisible() ? "\<c-y>" : "\<c-x>\<c-o>\<c-y>"
这是胡说八道。let可用于分配选项,但它们需要以&开头,在本例中,它们的值需要是字符串。您可能还打算使用just=或-=。当您分配选项时,只需使用set,除非您有充分的理由以另一种方式进行分配

let completeopt=-menu,nomenu