我在 ~/.vimrc 中使用以下行来允许我按 jk 而不是 Esc。
:imap jk <Esc>
在我添加 :set paste 之前它工作正常:
" Pressing jk is same as pressing Esc
:imap jk <Esc>
" Enable paste from system clipboard
" Bug? This disables imap jk <Esc>
set paste
谁能告诉我为什么会这样?它至少发生在这些系统上:
主机:Amazon Linux AMI Vim 版本:7.4
主机:MacOS 10.14.5 Vim 版本 8.0.1283
这是意料之中的。
的重点
'paste'
是在粘贴文本时“避免意外影响”,并且插入模式映射首先出现在它禁用的功能列表中。来自
:help 'paste'
:它还禁用了导致 Vim 修改粘贴文本的其他选项,例如与缩进和文本换行相关的选项。
在粘贴模式(除了 ESC,离开插入模式)中特殊的击键的唯一例外是由 设置的击键
'pastetoggle'
,如果设置了一个。该击键将禁用粘贴模式(启用时),因此您可以返回正常的插入模式。另请注意
'paste'
,在大多数情况下,实际上并不应该保留模式。由于您在启用时禁用了许多 Vim 功能,因此您通常只需要在粘贴期间使用它,然后立即禁用它。如果您愿意查看具有有用的粘贴模式键绑定的插件推荐,我可以建议 tpope 的vim- unimpaired ,它公开了这三个映射(来自正常模式):
[op
: 粘贴在当前行之前]op
: 粘贴在当前行之后yop
: 粘贴替换当前行在所有情况下,Vim 都将在打开时进入插入模式
'paste'
,并'paste'
在您使用 ESC 离开插入模式时立即关闭。这个想法是,粘贴是您打开该选项唯一要做的事情,因此其中一个击键的顺序,然后是实际粘贴的内容,然后是 ESC 将成为一个连贯的操作。有关更多详细信息,请参阅
:help pasting
该插件。