我的vimrc中有这些插入模式映射:
imap <C-e> <C-o>A
imap <C-a> <C-o>I
他们让ctrl-a
和ctrl-e
将光标移动到行的开头和结尾,而不离开插入模式, a la emacs键绑定。
我刚刚意识到<C-e>
映射引入了与自动完成子模式的冲突。 CTRL-E州的文档:
When completion is active you can use CTRL-E to stop it and go back to the
originally typed text.
我的<C-e>
映射会干扰此问题。有没有一种方法可以让ctrl-e
只有在自动完成不活动时跳转到行尾?
答案 0 :(得分:15)
没有设计方法来测试是否 Ctrl + X - 完成模式是否有效。如果一个 使用弹出菜单从可用的完成列表中进行选择 可接受的解决方案可能是映射
inoremap <c-e> <c-r>=pumvisible() ? "\<c-e>" : "\<c-o>A"<cr>
(特别是在menuone
选项中设置completeopt
的情况下。)
一般解决方案可以基于副作用:在完成中
子模式,不允许递归进入插入模式(参见
: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