zsh shell中命令提示符处的Tmux括号粘贴模式问题

zsh shell中命令提示符处的Tmux括号粘贴模式问题,zsh,tmux,Zsh,Tmux,问题步骤如下: 将文本“kill server”复制到系统剪贴板 点击前缀:进入tmux命令提示符 点击命令+v粘贴 结果粘贴文本是200~kill-server201~,而不是kill-server。这种奇怪的文本不是在shell提示符中出现的,而是在tmux命令提示符中出现的,我曾经尝试过这样做,但没有成功 存在此问题的环境: Mac OS 10.11.1、iTerm、zsh 5.0.7、Tmux 2.1 Mac OS 10.10.1、iTerm、zsh 5.1.1、Tmux 1.9 没

问题步骤如下:

  • 将文本“kill server”复制到系统剪贴板
  • 点击
    前缀:
    进入tmux命令提示符
  • 点击
    命令+v
    粘贴
  • 结果粘贴文本是
    200~kill-server201~
    ,而不是
    kill-server
    。这种奇怪的文本不是在shell提示符中出现的,而是在tmux命令提示符中出现的,我曾经尝试过这样做,但没有成功

    存在此问题的环境:

    • Mac OS 10.11.1、iTerm、zsh 5.0.7、Tmux 2.1
    • Mac OS 10.10.1、iTerm、zsh 5.1.1、Tmux 1.9
    没有此问题的环境:

    • MacOS10.11.1、iTerm、bash、TMUX2.1

      • 我将此作为答案发布,因为它有点太长,我需要一些格式。。。就这样

        我只能用zsh 5.1+复制。没有理由认为5.0.x会出现问题,因为括号中的粘贴模式是错误的。您可能在测试中做了一些错误的事情,或者您的设置可能有一些特殊之处,在这种情况下,您必须更好地解释。此外,iTerm2可能在这方面没有起到任何作用,因为我可以在Terminal.app中很好地复制(当然,它们可能都有相同的缺陷…)

        考虑到带括号的粘贴模式是ZLE特性,我认为(免责声明:本段的其余部分纯粹是我的推测),真正的问题是tmux在其命令提示符中使用底层shell的行编辑特性(ZLE,在zsh的情况下)来提供更好的编辑体验(例如,您可以访问那里的所有Emacs样式快捷方式),但它的命令提示符是一个哑词,不理解括号中的粘贴序列。因此,我们在tmux中有两种终端模拟模式,一种是在每个窗格中进行的相当智能的终端模拟,另一种是在其命令提示符中进行的哑终端模拟

        解决方案和解决办法:

      • 这可能值得向tmux报告

      • 关闭ZLE括号内的粘贴。它确实有效,您可能做错了。如果您不介意在tmux中丢失括号内的粘贴,您可以将以下内容放在shell init序列中的某个位置:

        (( $+TMUX )) && unset zle_bracketed_paste
        
      • 在iTerm2中,您可以访问高级粘贴(编辑->特殊粘贴->高级粘贴…,或⌥⌘五) .只需取消选中“括号粘贴模式”,您就不会看到转义序列


      • 我终于解决了这个问题,在我的oh my zsh中停用了
        安全粘贴
        插件


        过去是用来修复的。但是现在,箭头完成问题已经消失,而导致tmux括号粘贴问题。我还没有深入到
        安全粘贴的代码中。希望能帮助其他遇到同样问题的人。

        谢谢你的回复。这可能对其他使用zsh 5.1+的人有所帮助。