bash – 为什么tmux在粘贴多行命令时不插入换行符?
我经常在编写
shell脚本(或其他相关语言)时使用REPL样式的编码方法,并且最近注意到以下问题.我运行tmux所以我可以在一个窗格中将vim打开,并在终端提示符旁边并排显示.
TMUX 如果我尝试在Mac上使用CMD-v一次粘贴多行命令,即 a=hello b=World echo $a $b tmux不会正确处理换行符,而是提供以下输出: [user@host: ~]$a=hello b='World' echo $a $b [user@host: ~]$b='World'echo $a $b 如果我清除提示,并运行echo $a,我会向屏幕回调,但echo $b产生一个空行,显然echo $a $b行不会运行. 我使用像gnuplot这样的REPL或使用rlwrap获得相同的输出. 替代tmux尝试 使用vim-slime或手动使用相关的vim-slime系统调用时会出现同样的问题: [user@host: ~]$tmux set-buffer 'a=hello > b=World > echo $a $b > ' [user@host: ~]$tmux paste-buffer -p a=hello b=World echo $a $b [user@host: ~]$a=hellob=Worldecho $a $b 我已尝试使用tmux paste-buffer,并且没有bracketed paste mode的-p标志. 普通的bash shell,或GNU屏幕 如果我在普通的bash shell(而不是tmux)中执行相同的CMD-v粘贴操作,我得到: [user@host: ~]$a=hello [user@host: ~]$b=World [user@host: ~]$echo $a $b hello World [user@host: ~]$ 正如所料.在GNU屏幕(v4.04.00)中粘贴时,我得到相同的输出. 题 为什么tmux不会像bash / gnu屏幕那样逐行处理粘贴的命令呢?我们如何解决这个问题? 已经问过了吗? 似乎在this stackoverflow question和this other stackoverflow question也提出了同样的问题,但尚未得到令人满意的答复. This answer在每个命令之间提供了一个睡眠线的解决方案,它可以解决这个问题,但是在发送下一行文本之前,假设每个命令需要多长时间处理它是一个黑客攻击.肯定有更好的办法. 版本 我正在运行Mac OS X El Capitan(v10.11.6),iTerm2(v3.0.10),tmux(v2.2),GNU bash(v4.4.0). 使用Terminal.app(v2.6)可以重现相同的结果. 解决方法
我解决了这个问题.我一直在使用reattach-to-user-namespace来与OS X剪贴板进行交互;但是,根据reattach-to-user-namespace
github page:
我从.tmux.conf文件中删除了set-option -g default-command“reattach-to-user-namespace -l bash”行.我还将我的tmux映射更改为 bind -t vi-copy y copy-pipe "pbcopy" 并按预期将文本从vi-copy模式复制到OS X剪贴板.使用OS X默认Cmd-v粘贴文本会产生预期的行为(如问题中所述的屏幕或普通bash shell).感谢@Alex Torok提示我的配置文件调试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |