gpt4 book ai didi

vim - 如何为插入模式创建映射,而不是为 Vim 中的自动完成子模式创建映射?

转载 作者:行者123 更新时间:2023-12-03 22:24:13 25 4
gpt4 key购买 nike

我的 .vimrc 中有这些插入模式映射文件:

imap <C-e> <C-o>A
imap <C-a> <C-o>I
它们使 Ctrl-A 和 Ctrl-E 将光标移动到行的开头和结尾,而无需离开插入模式,就像 emacs 键绑定(bind)一样。
但是,我刚刚意识到 Ctrl-E 映射引入了与自动完成子模式的冲突。 :help complete_CTRL-E 中的文档状态:

When completion is active, you can use CTRL-E to stop it and go back to the originally typed text.


因此,我的 Ctrl-E 映射会干扰这一点。有没有一种方法可以让 Ctrl-E 仅在自动完成未激活时跳转到行尾?

最佳答案

没有适当的方法来测试是否
Ctrl+X-完成模式是否处于事件状态。
但是,以下两种解决方法是可能的。
1. 如果使用弹出菜单从可用列表中进行选择
补全(尤其是在 menuone 中设置的 completeopt选项),可接受的解决方案可能是映射

inoremap <expr> <c-e> pumvisible() ? "\<c-e>" : "\<c-o>A"
2. 一般的解决方案可以基于副作用:在
完成子模式,不允许递归进入插入模式
(见 :helpgrep Note: While completion ),所以如果尝试这样做
失败,我们可以假设我们正在完成:
inoremap <c-e> <c-r>=InsCtrlE()<cr>
function! InsCtrlE()
try
norm! i
return "\<c-o>A"
catch
return "\<c-e>"
endtry
endfunction

关于vim - 如何为插入模式创建映射,而不是为 Vim 中的自动完成子模式创建映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com