您需要两个命令序列来清理混乱:
首先,在乱码窗口中运行此命令(即使在时也可以使用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'
警告:执行完上述命令后,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:感谢所有帮助组装此解决方案的人。