在cat输入二进制文件后,我不小心搞砸了我的 tmux 终端。现在我tmux的搞砸了。分离和重新连接无济于事,重绘 (Cb r) 也无济于事。运行reset仅重绘活动窗格,而不是其余部分。ssty sane在室内或室外跑步也tmux无济于事。

在每个窗格中,我都从我输入的内容中得到正常的反馈(reset终端搞砸后立即的初始调用解决了这个问题),但我似乎无法修复状态栏。
在 中gnome-terminal,状态栏的每次更新都会导致状态栏增长(见上面的截图)。例如,当我运行一个新应用程序、切换窗格或调整窗格大小时,就会发生这种情况。强制重绘(通过C-b r、通过运行reset或通过 gnome-terminal 菜单)将状态栏缩小到一行,但它仍然损坏。
在 中xterm,状态栏确实保留在一行内,但如图所示仍然损坏。
我正在使用 tmux 1.5。
tmux终端?这个2008 年的错误报告似乎描述了同样的问题,但它被标记为已修复。我不知道它是在哪个版本中修复的,但 tmux 1.5 应该包含 2008 年的修复。
Rqo*_*mey 91
尝试重命名窗口 4
(中间是逗号)
或:Control+b :rename-window myNewname
Tin*_*ino 68
您需要两个命令序列来清理混乱:
首先,在乱码窗口中运行此命令(即使您在 中也能正常工作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
这是为了解决其他答案和评论中的所有问题。目前似乎只剩下第二个命令了。(参见下面的“缺失位”)。
要理解这是如何工作的,让我们先杀掉的状态行tmux和tty。之后我们再次更正它,使用应该始终可用的方法(与 command 不同reset)。
tmux终端(假设UTF-8)无法使用stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'
Run Code Online (Sandbox Code Playgroud)
警告:运行以上命令后,shell 看起来又瞎又聋,似乎只会用某种未知的外星语言胡说八道。有关如何修复此问题,请参见下文。
解释:
stty -echo 终止终端类型响应
printf '\016'做了 a SO,所以你在备用字符集上
printf '\033]2;%s\007' 'right status text'设置正确的状态,在本例中为$'\355',它暴露了一个演示错误
printf '\033k%2000s\033\\' $'\302\217' 设置窗口标题名称
这可能是在某些交互式命令崩溃并返回到 shell 后,您可以在终端上看到的组合。(/bin/cat你不能激怒stty -echo恕我直言,但是像vim通常这样的交互式命令会设置这个。)
stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用复制和粘贴(您可能需要
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
Run Code Online (Sandbox Code Playgroud)
在tmux命令行中执行此操作,可以在当前窗口中使用“Escape” :(其中“Escape”是您的tmux命令键)访问该命令行,然后输入命令。
或者tmux set-window-option automatic-rename on在您当前的终端中执行,但是如果您不直接处于正确的 shell 级别,则此操作会失败,例如它在sudo或 中不起作用ssh。
或者在当前tmux会话中打开另一个窗口并执行以下命令:
for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
Run Code Online (Sandbox Code Playgroud)或者打开另一个 shell 到正在运行的计算机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
Run Code Online (Sandbox Code Playgroud)PS:感谢所有帮助组装此解决方案的人。
Ran*_*832 26
您看到的具体问题与窗口 4 的名称/标题有关。 太长(显然)和包含奇怪字符的组合导致 tmux 将其测量为较短(因此它无法正确限制状态栏到屏幕的宽度)我不知道如何重置它(我的它跟踪前台进程的名称),您可能需要关闭窗口。
小智 5
tmux set-option -g status off && tmux set-option -g status on
Run Code Online (Sandbox Code Playgroud)
当窗口名称以外的其他东西被破坏时,我为我修复了这个问题,我无法费心去弄清楚它是什么。
| 归档时间: |
|
| 查看次数: |
35473 次 |
| 最近记录: |