为什么tmux在输入超过一行的命令时无法“滚动”? (OSX 终端.app)

为什么tmux在输入超过一行的命令时无法“滚动”? (OSX 终端.app)

当我使用tmux并输入超出该行的命令时,它无法重绘上一行。它只是清除当前行,我看不到我刚刚写的内容。它只重画第一行。

当我按下up并且最后一个命令不适合当前行(我只看到最后一行)时,也会发生这种情况。如果我再次按updown,我可以看到命令的所有行。

我不确定是什么导致了这个问题,但这很烦人。它必须与我的提示做一些事情吗?以防万一,这里是:

export PS1="%{$fg[blue]%}%n%{$reset_color%}@%{$fg[green]%}%m %{$fg[yellow]%}%~ %{$reset_color%}% "
export PS2=$_>
($TERM is set to screen)

顺便说一下,我使用的是 zsh 和 OSX Termial,但 bash 也存在问题。

而且(XQuartz)不存在这个问题xterm,所以我猜这是由OSX的Terminal.app引起的。

  • 有谁知道解决这个问题的方法吗?
  • 也许我可以以某种方式强制重画?

刚刚发现这个旧线程在 tmux 邮件列表上。

我尝试了 (screen, screen-256colors, xterm, xterm-color, nsterm) 的不同值$TERM,但错误仍然存​​在。

所以我想尽管切换到另一个终端模拟器我也无能为力?

答案1

这是 Terminal.app 中的一个错误,已被其他人注意到,例如,有什么方法可以解决屏幕对换行的错误处理吗? (也许只有 Terminal.app)

我可以使用 bash+tmux 重现效果,并捕获发送到屏幕的文本,看到 tmux 正在设置滚动边距以排除更新之前屏幕上的最后一行,这可能会导致换行。与此同时,bash 通过编写适合第一行的部分来编写一长行,另外两个字符,然后是回车符和第二行,等等。

这两个额外的字符应该强制换行。但 Terminal.app 似乎对滚动边距的切换以及将光标移动到滚动区域的最后一行然后在那里写一长行感到困惑。它没有换行,而是保留在原来的位置,长行的第二部分写在第一部分的上面。

在那里时关闭换行的功能,大多数应用程序假设它已启用。在跟踪(使用script)中,tmux 和 bash 都没有使用它。除非其中之一操纵换行,否则不会有任何收获。 tmux,例如,只是假设该功能甚至不检查am(自动保证金)功能的终端描述。它确实检查相关xenl标志(换行符故障),但从终端描述中删除它只会让事情变得更糟。

所以...如果这个错误阻止您使用 Terminal.app,iTerm2 是一个合适的替代方案。

答案2

我只需下载 iterm2 并使用它。
我认识的大多数开发人员使用 mac 就是这样做的。

我想你会发现这是一个更愉快的环境。

我将 iterm2 与 tmux 一起使用,效果很好。

http://www.iterm2.com

相关内容