vim:防止复合映射作为其后缀

vim:防止复合映射作为其后缀

我有从寄存器复制/剪切/粘贴的映射:

nnoremap <c-r><c-c>a "ayy   -- copy current line into register a
nnoremap <c-r><c-x>a "add   -- cut current line into register a
nnoremap <c-r><c-v>a "ap    -- paste from register a

所有其他寄存器和模式也一样。我也有常用的 cc/x/v 映射,用于从未命名的寄存器复制、剪切和粘贴。现在,如果我c-r c-v a快速按下,那么一切都会正常,但如果我按下 cr cv 并暂停思考要使用哪个寄存器,vim 会决定改为对 cv 进行操作(从未命名的寄存器执行粘贴)。

有没有办法让这样的映射在 vim 中不发生冲突?这样当我按 cr cv 时它就不会超时并变成 cv。

在标准键盘映射中,我认为这是通过某种“等待注册字母模式”来实现的。例如,如果我在命令行模式下使用 cr,vim 将显示“并无限期地等待注册字母,在正常模式下按“”时也是如此。

编辑:vim 帮助提到,在正常模式下重新映射 cc 会破坏中断脚本的能力。没错,但使用 cy 等其他工具时,问题仍然存在。

答案1

您要么需要:set notimeout完全禁用该行为,要么:set timeoutlen=5000将默认超时时间增加到例如 5 秒。:help map-typing详情请参阅

相关内容