使用 set paste 禁用 imap jk

使用 set paste 禁用 imap jk

我在 ~/.vimrc 中使用以下行来允许我按 jk 而不是 Esc。

:imap jk <Esc>

在我添加 :set 粘贴之前它工作正常:

" 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

答案1

这是预料之中的。

要点是'paste'是为了在粘贴文本和插入模式映射位于其禁用的功能列表中的第一个位置时“避免意外影响”。

:help 'paste':

当该'paste'选项打开时(也当它已经打开时):

  • 禁用插入模式和命令行模式下的映射
  • 缩写已禁用
  • [...]

它还禁用导致 Vim 修改粘贴文本的其他选项,例如与缩进和文本换行相关的选项。

在粘贴模式下特殊的击键的唯一例外(除了 ESC,用于离开插入模式)是由以下设置的击键'pastetoggle',如果已设置。该按键将禁用粘贴模式(启用时),因此您可以返回到正常插入模式。

另请注意,'paste'在大多数情况下,模式实际上不应该保持打开状态。由于在启用 Vim 时会禁用许多 Vim 功能,因此您通常只需要在粘贴期间使用一项功能,然后立即禁用它。


如果您愿意查看具有粘贴模式有用键绑定的插件推荐,我可以推荐 tpopevim 未受损,它公开了这三个映射(从正常模式):

  • [op: 粘贴到当前行之前
  • ]op:粘贴到当前行之后
  • yop:粘贴替换当前行

在所有情况下,Vim 都会在打开的情况下进入插入模式'paste',并且'paste'一旦您使用 ESC 离开插入模式,Vim 就会关闭。这个想法是,粘贴是打开该选项时您要做的唯一事情,因此其中一个击键的顺序,然后是实际粘贴的内容,然后是 ESC 将成为一个连贯的操作。

:help pasting对于该插件更多细节。

相关内容