Tmux 忘记了创建会话的目录

Sha*_*oke 8 tmux

当我在 tmux 中创建多个会话时,后续会话中每个新窗口的当前目录都设置为第一个的当前目录。

例如:

-> cd /home/one && tmux new-session -n one\; new-window -n two
   # /home/one is the current directory for each window

-> cd /home/two && tmux new-session -n three\; new-window -n four #\; etc.
   # "/home/two" is the current directory for the window "three"
   # but for the window "four" and other created windows it is "/home/one"
Run Code Online (Sandbox Code Playgroud)

如何强制 tmux 将后续会话中每个新窗口的当前目录设置为创建会话的目录?

多路复用器 1.6

zsh 4.3

Dav*_*hop 22

从 tmux 1.9 开始, default-path 选项已被删除

您可以使用以下命令在会话打开的目录中打开(名称中的“客户端”会向我表明它是当前在您的 shell 中运行的 tmux,但在会话之间切换时似乎会切换路径同一个客户):

bind-key c  new-window -c "#{client_cwd}"
Run Code Online (Sandbox Code Playgroud)

否则复制当前窗格的路径:

bind-key c  new-window -c "#{pane_current_path}"
Run Code Online (Sandbox Code Playgroud)

还有可能对某些工作流程有吸引力的 pane_start_path。

bind-key c  new-window -c "#{pane_start_path}"
Run Code Online (Sandbox Code Playgroud)

对于拆分窗口命令。

bind-key % split-window -h -c "#{pane_current_path}"
bind-key '"' split-window -c "#{pane_current_path}"
Run Code Online (Sandbox Code Playgroud)


小智 0

这里有很多答案:https://unix.stackexchange.com/questions/12032/create-new-window-with-current-directory-in-tmux

总之:

从 tmux FAQ 中,一种钝的(但非常通用且相当独立于 shell 的)方式:

  • 如何在与当前窗口相同的目录中打开一个新窗口?

一种选择是仅在窗口中运行“TMUX= tmux”。但是,这仅在没有命令运行时才有效,以便您可以输入命令。

解决方法是通过环境变量让 tmux 了解当前路径。为此,请使用以下命令:

[ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD
Run Code Online (Sandbox Code Playgroud)

它将 TMUXPWD_i (其中 i 是当前窗口的编号)设置为当前目录的路径。该命令可以添加到PS1中,例如:

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '
Run Code Online (Sandbox Code Playgroud)

创建新窗口时,应要求 shell 更改目录。您可以定义一个新的绑定(例如,如果使用 GNU bash):

bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'
Run Code Online (Sandbox Code Playgroud)

即使命令当前正在终端中运行,此解决方案也将起作用,但它不会在刚刚与另一个窗口交换的窗口中起作用,因为 TMUXPWD_i 在交换后不会更新。但是,一旦显示新提示,TMUXPWD_i 就会正确更新。

只需根据您的情况替换对 shell 的调用即可。

另外,显然较新版本的 tmux 已经通过命令解决了这个问题

tmux 新窗口

旧版本据称可以这样工作:

呼叫

tmux 新w

从你的 shell 中将在该目录中打开 tmux。

如果您希望能够从 tmux 中的当前工作目录打开新窗口或窗格,那么您应该:

tmux 设置选项默认路径“$PWD”