【问题标题】:Why does tmux not insert newlines when pasting a multi-line command?为什么粘贴多行命令时 tmux 不插入换行符?
【发布时间】:2016-09-22 18:07:26
【问题描述】:

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

已经问过了?

this stackoverflow questionthis 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) 可以重现相同的结果。

【问题讨论】:

  • 你能用完全空的 .tmux.conf 和 .bashrc 文件重现这个吗?您是否正在使用某种可能会发挥作用的剪贴板管理器?这很奇怪,因为我没有遇到这个问题,而且我运行的是相同版本的 OSX、iTerm2 和 tmux。
  • 啊,我使用 reattach-to-user-namespace 作为包装器来访问 mac os 剪贴板 (this github repo),这似乎是导致问题的原因。复制/粘贴似乎是 vim/tmux/mac os 一直令人头疼的问题,所以我很感激任何解决方案的建议。

标签: bash shell paste tmux


【解决方案1】:

我解决了这个问题。我一直在使用reattach-to-user-namespace 与 OS X 剪贴板进行交互;但是,根据reattach-to-user-namespacegithub page

注意:在 Yosemite(及更高版本)下,粘贴板访问似乎工作正常 没有此存储库中的程序。

我从.tmux.conf 文件中删除了set-option -g default-command "reattach-to-user-namespace -l bash" 行。我还将我的 tmux 映射更改为

bind -t vi-copy y copy-pipe "pbcopy"

它会按预期将文本从 vi 复制模式复制到 OS X 剪贴板。使用 OS X 默认 Cmd-v 粘贴文本会产生预期的行为(如问题中所述的屏幕或普通 bash shell)。感谢@Alex Torok 提示我调试配置文件。

【讨论】:

    猜你喜欢
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2017-01-05
    • 2023-01-07
    相关资源
    最近更新 更多