参考教程: https://www.ruanyifeng.com/blog/2019/10/tmux.html
tmux使会话与窗口解绑,一个窗口source .bashrc
更新了,另一个窗口可能没有
ctrl+b
前缀键
%
分成左右两栏
"
分成上下两栏
up
选择上边的窗口
[
查看历史记录
窗口
<C-b> z
最大化/最小化一个窗口
<C-b> c
创建一个新的窗口,使用 <C-d>
关闭
<C-b> N
跳转到第 N 个窗口,注意每个窗口都是有编号的
<C-b> p
切换到前一个窗口
<C-b> n
切换到下一个窗口
<C-b> w
列出当前所有窗口
Tmux-Path 双向绑定
使用tmux会存在一个问题:在1个窗口设置了环境变量,在其他窗口并不会生效。
下面的脚本会帮助我们解决问题,它将tmux白名单内的全局变量值自动同步到Shell环境变量。
首先,编写~/.tmux.conf
白名单。以NACOS为例:
参考教程(zsh):https://manselmi.github.io/notes/tmux-env-var-sync/
# https://www.mankier.com/1/tmux#Options # https://www.mankier.com/1/tmux#Global_and_Session_Environment set-option -g update-environment \ 'DISPLAY KRB5CCNAME SSH_AGENT_PID SSH_ASKPASS SSH_AUTH_SOCK SSH_CLIENT SSH_CONNECTION SSH_TTY \ SSH_USER_AUTH WINDOWID XAUTHORITY \ NACOS_USERNAME NACOS_PASSWORD \ '
接着编写~/.bashrc
同步脚本,下面的脚本兼容了自动打开tmux操作。
tm () { local SESSION_NAME="${1:-default} " shift tmux new-session -AD -s "$SESSION_NAME " "$@ " } tmux_global_update_var () { local VAR="$1 " local VALUE if [ $# -ge 2 ]; then VALUE="$2 " else if [[ -v ${VAR} ]]; then VALUE="${!VAR} " else tmux set-environment -gru -- "$VAR " >/dev/null 2>&1 return fi fi tmux set-environment -g -- "$VAR " "$VALUE " >/dev/null 2>&1 } tmux_shell_update_var () { local VAR="$1 " local TMUX_OUTPUT local TMUX_ERROR_CODE if TMUX_OUTPUT=$(tmux show-environment -gs -- "$VAR " 2>/dev/null); then eval "$TMUX_OUTPUT " else unset "$VAR " fi } tmux_update_environment () { command -v tmux >/dev/null || return local VARS=($(tmux show-options -gv update-environment)) if [[ -z "$TMUX " ]]; then tmux has-session >/dev/null 2>&1 || return for var in "${VARS[@]} " ; do tmux_global_update_var "$var " done else for var in "${VARS[@]} " ; do tmux_shell_update_var "$var " done fi } PROMPT_COMMAND="tmux_update_environment${PROMPT_COMMAND:+; $PROMPT_COMMAND} " if command -v tmux &>/dev/null && [[ -n "$SSH_CONNECTION " && -z "$TMUX " && $- == *i* ]]; then if tmux has-session -t default 2>/dev/null; then exec tmux attach -t default else exec tmux new -s default fi fi
设置tmux全局变量,自动同步到所有窗口Path
tmux set-environment -g NACOS_USERNAME "nacos" echo $NACOS_USERNAME # 应该输出nacos,并且在所有窗口生效