当我在 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"
我如何强制 tmux 将后续会话中每个新窗口的当前目录设置为创建会话的目录?
tmux 1.6
zsh 4.3
答案1
从 tmux 1.9 开始,default-path 选项已被删除。
您可以使用以下命令在会话打开的目录中打开(名称中的“客户端”会向我表明它是当前在您的 shell 中运行的 tmux,但在同一客户端中的会话之间切换时似乎会切换路径):
bind-key c new-window -c "#{client_cwd}"
否则复制当前窗格的路径:
bind-key c new-window -c "#{pane_current_path}"
还有 pane_start_path 可能会对某些工作流程有吸引力。
bind-key c new-window -c "#{pane_start_path}"
对于分割窗口命令。
bind-key % split-window -h -c "#{pane_current_path}"
bind-key '"' split-window -c "#{pane_current_path}"
答案2
我意识到这个问题已经很老了,但是当我自己寻找答案时,它是 StackExchange 上出现的唯一问题之一,所以这里是我针对 tmux 1.8 解决它的方法。
该new-window
命令使用-c
标志来指定新窗口的当前目录。默认情况下,它是一个空字符串,它将使用当前窗格的工作目录作为新窗口的目录。传入标志-
的值-c
将把新窗口的目录设置为会话打开的目录。
以下是文档的摘录:
-c specifies the working directory in which the new window is created. It may
have an absolute path or one of the following values (or a subdirectory):
Empty string Current pane's directory
~ User's home directory
- Where session was started
. Where server was started
如果您想更改<PREFIX> c
键绑定的默认行为以反映这一点,请按照我的做法操作~/.tmux.conf
:
bind-key c new-window -c -
答案3
这里有很多答案: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
将 TMUXPWD_i(其中 i 是当前窗口的编号)设置为当前目录的路径。此命令可以添加到 PS1,例如:
PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '
创建新窗口时,应要求 shell 更改目录。您可以定义新的绑定(例如,如果使用 GNU bash):
bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'
即使命令当前正在终端中运行,此解决方案仍可行,但它无法在刚刚与另一个窗口交换的窗口中工作,因为交换后 TMUXPWD_i 将不会更新。但是,一旦显示新的提示,TMUXPWD_i 就会正确更新。
只需根据您的需要替换对 shell 的调用即可。
此外,显然新版本的 tmux 已经通过命令解决了这个问题
tmux 新窗口
旧版本据称是这样工作的:
呼叫
tmux 新
从你的 shell 将在该目录中打开 tmux。
如果您希望能够从 tmux 中的当前工作目录打开新窗口或窗格,那么您应该这样做:
tmux 设置选项默认路径“$PWD”