gpt4 book ai didi

bash - 为什么 tmux 在粘贴多行命令时不插入换行符?

转载 作者:行者123 更新时间:2023-11-29 09:15:06 28 4
gpt4 key购买 nike

我在编写shell脚本(或其他相关语言)时经常使用REPL风格的编码方法,最近注意到以下问题。我运行 tmux,这样我就可以在带有终端提示的 Pane 中并排打开我的脚本。

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,我会得到 hello 回显到屏幕上,但是 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 screen 那样逐行处理粘贴的命令?我们如何解决这个问题?

已经问过了吗?

似乎在 this stackoverflow question 上提出了同样的问题, 和 this other stackoverflow question , 但尚未得到令人满意的答复。

This answer提供了在每个命令之间添加 sleep 行的解决方案,它可以解决问题,但是假设每个命令在发送下一行文本之前需要处理多长时间有点不合理。一定有更好的方法。

版本

我正在运行 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 :

Note: Under Yosemite (and later) pasteboard access seems to work fine without the program from this repository.

我从 .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 提示我调试配置文件。

关于bash - 为什么 tmux 在粘贴多行命令时不插入换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39646008/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com