进一步阅读

进一步阅读

我正在使用 zsh。

我将右键单击 zsh 窗口中的复制内容,然后右键单击粘贴它。我总是会丢失一些字符,并且最后一个字符的大小写会翻转。

例如

echo this is a long message

粘贴为

(empty line)

this is a long messaG

vim hello.txt

变成

m hello.tX

可能是什么原因造成的以及如何修复它?

答案1

造成这种情况的原因有两个:

  • 有什么东西(可能是 Z shell)告诉你的终端打开括号内的粘贴
  • Z shell 使用vicmdviins键盘映射。

发生的事情是这样的:

  1. Z shell 启动,并发出控制序列以在终端仿真器中打开括号内的粘贴。或者,也许文本编辑器在某个时刻执行了此操作,并且某些原因导致它无法发出控制序列以再次将其关闭。
  2. 你粘贴一些东西。
  3. 终端仿真器发送括号粘贴控制序列的开始、粘贴的文本和括号粘贴控制序列的结束。
  4. 起始括号粘贴控制序列的第一个字符是 ESC,它取消 ZLE 的vi插入模式并返回到 ZLE 的vi命令模式。
  5. 后续字符是vi命令,不会执行太多操作,直到到达字母oi,进入插入模式。
  6. 其余文本在插入模式下插入。
  7. 末尾括号粘贴控制序列的第一个字符是 ESC,它取消 ZLE 的vi插入模式并返回到 ZLE 的vi命令模式。
  8. 控制序列的后续字符没有多大作用。
  9. 末尾括号粘贴控制序列的最后一个字符是~,它是vi交换大小写的命令。这会导致粘贴文本的最后一个字母在大写和小写之间交换。

您可以通过以下两种方法之一解决此问题:

  • 阻止 Z shell 打开括号内的粘贴;因为它显然尚未配置为在vicmd/viins键映射中处理它。
  • vicmd使括号内的粘贴在/键盘映射中起作用viins。您如何执行此操作取决于您首先如何使 Z shell 识别括号内的粘贴。该safe-paste插件采用 emacs 键盘映射,并且必须进行调整才能与 vi 键盘映射良好配合。但这并不是现在在 Z shell 中获得括号粘贴的唯一方法。

进一步阅读

相关内容