有人问过类似问题这里但我无法解决这个问题
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 标题与 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