我使用的是旧版本的 tmux (v1.5)。如何配置 tmux 将默认目录设置为会话启动的目录?
对于较新版本的 tmux(1.7 及更高版本),这不是问题。我可以简单地添加以下内容~/.tmux.conf以获得我想要的:
set-option -g default-path "-"
Run Code Online (Sandbox Code Playgroud)
不幸的是,此选项在我使用的 tmux 版本中不可用。
这有点令人费解,但它有效:
将此函数定义添加到您的~/.profile:
tmux() ( ORIG_PWD_FOR_TMUX="${PWD}" command tmux "$@"; )
Run Code Online (Sandbox Code Playgroud)
此函数运行tmux时将环境变量ORIG_PWD_FOR_TMUX设置为当前目录 ( ${PWD})。每当创建新窗口时都会引用此变量。
将以下内容添加到您的~/.tmux.conf文件中:
set-option -g default-command "[ -z \"\${ORIG_PWD_FOR_TMUX+set}\" ] || { cd \"\${ORIG_PWD_FOR_TMUX}\"; unset ORIG_PWD_FOR_TMUX; }; exec ${SHELL}"
set-option -g -a update-environment " ORIG_PWD_FOR_TMUX"
Run Code Online (Sandbox Code Playgroud)
上面的default-command值检查ORIG_PWD_FOR_TMUX是否设置了环境变量。如果是这样,它会更改到该目录并取消设置变量(以保持环境清洁)。然后调用将在原始目录中运行的 shell。
该update-environment设置告诉tmux将 的值复制ORIG_PWD_FOR_TMUX到会话环境中,以便将来的new-window命令具有可用的变量值。
现在您可以tmux像往常一样简单地运行,除了新窗口将在与会话相同的目录中启动。