捕获二进制文件后,tmux状态栏损坏,如何重置?


94

cat进入二进制文件后,我不小心拧紧了tmux终端。现在我tmux一团糟。拆卸和重新连接无济于事,重绘也无济于事(Cb r)。“运行” reset仅重绘活动窗格,而不重绘其余部分。ssty sane在室内或室外运行都tmux无济于事。

tmux搞砸了

在每个窗格中,我都会从键入的内容中得到正常的反馈(在reset终端混乱之后立即进行的首次调用解决了此问题),但是我似乎无法修复状态栏。

在中gnome-terminal,对状态栏的每次更新都会导致状态栏增长(请参见上面的屏幕截图)。例如,当我运行新应用程序,切换窗格或调整窗格大小时,会发生这种情况。强制重画(通过C-b r运行reset或通过gnome-terminal菜单,通过)将状态栏缩小到单行,但仍然损坏。

在中xterm,状态栏的确保留在一行内,但是如图所示,它仍然损坏。

我正在使用tmux 1.5。

  • 如何修复tmux终端?

这个来自2008年的错误报告似乎描述了相同的问题,但是被标记为已修复。我不知道它是在哪个版本中修复的,但是tmux 1.5应该包含2008年以来的修复。


刚遇到这个问题,“清除”对我有用。
user149818 2014年

1
万一有人遇到相同的问题,完成上述所有操作后,我的tmux状态栏仍然混乱。将窗口选项设置为状态右可修复它。

2
以上建议也为我解决了。这样做的命令是:Control+ b+ :,然后set -g status-right "#H"将status-right设置为主机名。
Mayank

Answers:


85

尝试重命名窗口4

  • 切换至视窗4: Control+b 4
  • 重命名窗口:Control+ b , Control+ umyNewname

(中间是逗号)

或:Control+b :rename-window myNewname


1
重命名窗口的工作就像一种魅力
2015年

4
输入新名称之前,您需要先清除名称。最简单的方法是使用ctrl+u,因此完整序列为ctrl+b , ctrl+u newname
z0r15年

1
甜蜜-这也适用byobuf8, <newname>
ali_m 2015年

为什么Control-u需要?Control-,已经重命名了吗?尽管我可以确定我的情况是否需要它,但是它是否是某种重置字符?
hbogert

1
Control-u清除该行。如果您在终端中每个胖手指都知道密码,则可以使用control-u清除条目,而无需按20键退格
Rqomey

55

您需要两个命令序列来清理混乱:

首先,在乱码窗口中运行此命令(即使在时也可以使用ssh):

stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh

然后在运行的计算机上运行tmux它(它在内部和外部均可运行tmux):

以下命令会影响所有tmux实例,这些实例的左状态可能会比当前窗口改变更多。如果不需要该功能,请不要使用它。

tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

详细解释

它被汇编来解决其他答案和评论中发现的所有问题。当前,第二条命令似乎只剩下一小部分了。(请参见下面的“缺失位”)。

要理解这是如何工作的,让我们先杀掉的状态行tmuxtty。之后,我们使用应始终可用的方法(不同于command reset)再次对其进行更正。

如何使tmux终端(假设UTF-8)不可用

stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'

警告:执行完上述命令后,shell看上去盲目而聋哑,似乎只能以某种未知的外语来谈论胡说八道。有关如何修复此问题,请参见下文。

解释:

  • stty -echo 杀死终端类型响应

  • printf '\016'做一个SO,所以您在备用字符集上

  • printf '\033]2;%s\007' 'right status text'设置正确的状态,在这种情况下为$'\355',这会暴露演示文稿错误

  • printf '\033k%2000s\033\\' $'\302\217' 设置窗口标题名称

这可能是您在某些交互式命令崩溃并将其放回到外壳中之后在终端上看到的组合。(/bin/cat无法触发stty -echo恕我直言,但vim通常使用交互式命令进行设置)。

现在清理这个烂摊子

stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh

注意:如果您使用复制粘贴(您可能需要Shift在粘贴时按住),如果您使用上述命令弄乱了您的,则可能看不到粘贴tty。因此,粘贴后只需盲目按Enter键即可。

解释:

  • stty sane 设置“合理的”终端参数,因此您在键入时可以回显

  • printf '\033k%s\033\\' "$(basename "$SHELL")"将窗口标题设置回正常。您可以选择使用tmux rename-window "$(basename "$SHELL")",但tmux rename-window仅限于tmux转义序列始终有效的地方。

  • printf '\033]2;%s\007' "$(uname -n)"重置状态权限以显示为默认值。(请注意,您不应使用tmux set status-right "something",因为它只会输出pane title损坏的,因此status-right只暴露一些演示错误。也请注意,我没有找到tmux直接设置窗格标题的命令。)

  • tput reset 重置终端,以防万一

  • tmux refresh 刷新屏幕以清除可能显示的其他碎片

缺少位

printf '\033k%s\033\\' "$(basename "$SHELL")"失去的标准能力tmux在左侧状态区域以当前命令。printf '\033k%s\033\\' "something"被执行后,这种能力就消失了,我没有找到一个好方法,但是,如何像以前一样恢复它。

但是,如下面的评论所述,您可以tmux通过以下tmux设置激活类似的功能来替代:

set-window-option automatic-rename on
  • 可以在tmux命令行中执行此操作,可以在当前窗口中使用“ Escape” :(其中“ Escape”是您的tmux命令键)进行访问,然后输入命令。

  • tmux set-window-option automatic-rename on在您当前的终端中执行,但是如果您不在正确的外壳层上(例如,它在sudo或中不起作用),则此操作将失败ssh

  • 或在当前tmux会话中打开另一个窗口并执行以下命令:

    for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
  • 或打开另一个正在运行的计算机的外壳程序tmux并执行以下命令(这在tmux之外):

    tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

PS:感谢所有帮助组装此解决方案的人。


2
请注意uname -n而不是hostname -shostnameroot上下文中是危险的,因为您可能最终将主机重命名为-s在旧版Linux / Unix上,其中hostname不包含选项。
蒂诺

不进行重置窗格标题让我伤心过; 这就是为什么我首先在​​这里。感谢您是该页面上至少承认这一缺点的人!
伊万

2
也可考虑“TMUX运输及工务局局长自动重命名”固定窗口标题后
EB。

stty sane当我的终端被拧紧并且什么也没显示时,该零件对我有所帮助。谢谢!
约翰尼,

如果需要“丢失位”,即当前运行的命令显示在左侧状态区域,则可以使用tmux命令set-window-option automatic-rename
David Foerster

26

您所看到的特定问题与窗口4的名称/标题有关。太长(很明显)和包含奇怪字符的组合(导致tmux将其测量为较短)(因此无法正确限制状态栏)到屏幕的宽度)我不确定如何重设它(因为它跟踪了前台进程的名称),您可能必须关闭窗口。


4
默认重命名窗口是^b - ,
Rob

8
如果@Rob注释中的键盘快捷键使您感到困惑,则为Ctrl- b然后,
道格·保罗

请注意,在重命名窗口时,该字段会预先填充当前的窗口名称(并且光标位于该名称的末尾)。由于我的窗口名称是一长串垃圾,因此我不得不按住Backspace一分钟以清除当前名称。对我来说,视觉反馈最终清楚地表明,整个旧名称已被删除。
道格·保罗

您还可以使用Ctrl-b :重命名窗口<名称在此处>; 这将使用tmux命令系统,而不是该命令的键盘快捷键。
Abbafei 2015年


5
tmux set-option -g status off && tmux set-option -g status on 

当窗口名称以外的其他东西损坏时,我为我解决了这个问题,我也不必费心找出它的含义。


2

tmux可能只是问题的一部分。您可能必须stty sane在命令行中调用。这会将内核中的TTY驱动程序重置为通常允许您继续进行操作的一组默认值。如果TTY驱动程序搞砸了,您可能必须键入stty sane“ blind”,即没有屏幕反馈。


stty sane也不能解决问题。我确实有屏幕上的反馈,tmux我可以在每个窗格中进行输入并像往常一样获得反馈,但是一旦tmux需要绘制某些内容(例如,运行新应用程序,切换或调整窗格大小),状态栏就会移到窗格中...
gerrit 2012年

2

尝试重新加载您的配置文件?

Ctrlb, 然后: :source-file ~/.tmux.conf


迄今为止最好的解决方案。
戴夫

-3

为我解决此问题:

我刚刚杀死了问题窗格和窗口,并创建了一个新的窗口和窗格。

在问题窗格中,CTRL+ AXCTRL+ AC


再这样对我。没有其他方法可以帮助
Itech
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.