我希望能够将我的 tmux 窗口标题自动重命名为 prompt_command、ps1 或只是我ssh
要使用的机器的主机名。打开 9 个标有“ssh”的窗口真的没用。在做系统管理员工作时,我打开了太多新屏幕并使用 ssh 来手动重命名它们。
我注意到的一件事是tmux
更新了xterm
窗口标题,所以我觉得它必须知道。
screen
有什么帮助吗?如果我可以获得此功能,我甚至愿意回去。
答案1
我不知道有什么方法可以让它直接看着你PS1
。
但是,tmux
理解设置窗口名称的相同命令也是screen
如此。
~/.bashrc
因此,您可以在或中定义这样的函数~/.zshrc
:
settitle() {
printf "\033k$1\033\\"
}
然后settitle
从任何地方拨打电话。
例如,您可以将其包含在PS1
变量中,例如
PS1='$HOST:$PWD$(settitle $HOST:$PWD)$ '
或通过PROMPT_COMMAND
:
PROMPT_COMMAND='$(settitle $HOST:$PWD)'
# and don't change PS1
现在我了解您已经tmux
在桌面上运行,并且您希望ssh
命令具有主机名而不是ssh
,这要容易得多。
鉴于您已添加settitle
到本地~/.bashrc
,您要做的就是添加这个:
ssh() {
settitle "$*"
command ssh "$@"
settitle "bash"
}
如果有必要,请用 zsh 替换 bash,或者使用其他更合适的名称。
答案2
tmux rename-window -t${TMUX_PANE} "Title Text"
这是在窗口中设置 tmux 标题的正确方法。$TMUX_PANE 变量由 tmux 设置,用于区分不同的窗格。
答案3
仅适用于通过搜索如何更改 tmux 会话标题来到这里的人:
Ctrl+ B,$
这将给您一个提示,您可以在其中重命名活动会话。
要更改活动窗口,请改用 komma:
Ctrl+ B,,
答案4
或者exit
你tmux rename-window "bash"
可以使用
ssh() {
if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
tmux rename-window "$*"
command ssh "$@"
tmux set-window-option automatic-rename "on" 1>/dev/null
else
command ssh "$@"
fi
}
这将重新激活为下一个命令自动重命名窗口的正常功能。
该if
块可防止(在没有它的情况下)使用其他 shell 上使用的命令重命名tmux
当前窗口ssh
(超出tmux
)。