保持 tmux 标题、bash 标题和终端/iTerm 窗口标题同步

保持 tmux 标题、bash 标题和终端/iTerm 窗口标题同步

有人问过类似问题这里但我无法解决这个问题

tmux:

# use titles
set-option -g set-titles on
set-option -g set-titles-string '#T'

# add custom term
set -g default-terminal "tmux-256color"
set -as terminal-overrides ',xterm*:XT:sitm=\E[3m'

# always reattach to user namespace
set-option -g default-shell $SHELL
set-option -g default-command "reattach-to-user-namespace -l $(echo $SHELL)"

狂欢

  case "$TERM" in
    tmux*)
      printf '\033]2;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\033\'
      PROMPT_COMMAND="printf '\033]2;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\033\'"
      ;;
    xterm*)
      if [ $ITERM_SESSION_ID ]; then
        export PROMPT_COMMAND='echo -ne "\033];${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"; ': $PROMPT_COMMAND;
      fi
      ;;
  esac

Bash 可以很好地保持标题更新,但是在 tmux 中我无法让它始终保持当前标题。

tmux(更改目录后标题未更新)

在此处输入图片描述

非 tmux(更改目录后更新标题) 在此处输入图片描述

有没有办法可靠地使 tmux 标题与 bash 标题保持同步?

答案1

经过多次反复和几十次 tmux 重新加载/重启后,我终于找到了一个完全符合我要求的解决方案,可以在所有我想要的终端仿真器(iTerm/Kitty/Terminal.app)中使用,无论是否使用 tmux

.bashrc

case "$TERM" in
  tmux*)
    export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'
    ;;
  xterm*)
    if [ $ITERM_SESSION_ID ]; then
      export PROMPT_COMMAND='echo -ne "\033];${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"; '
    else
      export PROMPT_COMMAND='echo -ne "\033]${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"; '
    fi
    ;;
esac

tmux

# use titles
set-option -g set-titles on
set-option -g set-titles-string "#T"
set-option -g automatic-rename on

相关内容