将 tmux 窗口名称重命名为 prompt_command、ps1 或远程 ssh 主机名?

将 tmux 窗口名称重命名为 prompt_command、ps1 或远程 ssh 主机名?

我希望能够将我的 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,

看:如何在 tmux 中重命名会话?

答案4

或者exittmux 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)。

相关内容