在zsh shell的命令提示符下,Tmux括起了粘贴模式问题

时间:2015-10-31 14:47:53

标签: zsh tmux

这样的问题步骤:

  1. 将文本'kill-server'复制到系统剪贴板
  2. 点击Prefix :进入tmux命令提示符
  3. 点击command+v以粘贴
  4. 结果粘贴文字为200~kill-server201~,而不是kill-server。这个奇怪的bracketed paste mode文本 not 在shell提示符中发生,但是在tmux命令提示符下,我试过turn off bracketed paste mode但没有运气。

    存在此问题的环境:

    • 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

    没有此问题的环境:

    • Mac OS 10.11.1,iTerm,bash,Tmux 2.1

2 个答案:

答案 0 :(得分:6)

我发布这个作为答案,因为它有点太长了,我需要一些格式......所以这就是它。

我只能使用zsh 5.1+重现。没有理由期待5.0.x上的问题,因为括号粘贴模式是introduced in 5.1。你可能在测试中做错了什么,或者你的设置可能有一些特殊的东西,在这种情况下你必须更好地解释。此外,iTerm2可能在这方面没有任何作用,因为我可以在Terminal.app中重现就好了(当然它们都可能有相同的缺陷......)。

考虑括号粘贴模式是一个ZLE功能,我认为(免责声明:本段的其余部分纯粹是我的推测)真正的问题是tmux使用底层shell的行编辑功能(ZLE,在zsh的情况下)在其命令提示符中提供更好的编辑体验(例如,您可以访问那里的所有Emacs样式快捷方式),但它的命令提示符是一个愚蠢的术语,并且不理解括号内的粘贴序列。所以我们在tmux中有两种终端仿真模式的奇怪情况,一种是在每个窗格内发生的相当聪明,另一种是在命令提示符中发生的愚蠢。

解决方案和解决方法:

  1. 这可能值得向tmux汇报。 https://github.com/tmux/tmux/issues

  2. 关闭ZLE括号内的糊状物。它确实有效,你可能做错了。如果您不介意在tmux中丢失括号中的粘贴,可以将以下内容放在shell init序列中:

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

答案 1 :(得分:0)

我解决了这个问题,最后只是停用了我的oh-my-zsh中的.LeftMouseDownMask插件。

用于修复safe-pastezsh up arrow completion issue。但现在,箭头完成问题已经消失,同时导致tmux括号粘贴问题。我还没有深入研究safe-paste的代码。希望能帮助别人遇到同样的问题。