【问题标题】:How to change the starting directory of a tmux session?如何更改 tmux 会话的起始目录?
【发布时间】:2014-12-05 02:30:43
【问题描述】:

启动 tmux 会话的目录将是所有新窗口的启动目录。

我的问题是,如何在不关闭会话的情况下更改此起始目录?

【问题讨论】:

标签: linux unix tmux


【解决方案1】:

执行此操作的方法是从会话中分离(^b d 使用默认键绑定),然后在重新附加到它时指定不同的目录。附加到会话时,使用-c 标志指定工作目录。这是一个例子:

$ tmux list-sessions
tmuxwtfbbq: 3 windows (created Tue Apr  5 14:25:48 2016) [190x49]
$ tmux attach-session -t tmuxwtfbbq -c /home/chuck/new_default_directory

此设置将保留 - 重置工作目录后,您无需在每次重新附加到会话时都指定它。

作为记录,我使用的是 tmux 2.0 版(尽管我认为这并不重要 - 我找不到任何关于在更改日志中向 attach-session 命令添加 -c 选项的信息,所以我假设它已经存在了很长一段时间)。

【讨论】:

  • 这对我很有帮助。似乎“当前工作目录”与会话的特定附件(运行 tmux 时所在的位置)相关联,而不是与 tmux 会话本身相关联。谢谢chucksmash!
  • 这在开始新会话时也有效。 tmux new -s foo -c ~/some/path。我正在使用 2.1 版。
  • 如果有人知道这是否可能,那就太好了。 new-window 使用会话中的 cwd。
  • 如果我们可以做一些类似^b r ("root") 的事情来定义当前工作目录的起始目录以用于更多的窗口/窗格
【解决方案2】:

Chucksmash 的回答不错,但如果您愿意,也可以不使用会话来实现。命令attach-session 也可以在 tmux 命令提示符中使用;并且可以使用点将目标会话指定为“当前”会话。

attach-session -t . -c /path/to/new/directory

【讨论】:

  • 您也可以在会话中执行以下操作。 :attach-session -t . -c '#{pane_current_path}'
  • 这允许添加一个键绑定来更新工作目录,例如使用bind -n M-u attach-session -t . -c '#{pane_current_path}' 将alt-u(不带前缀)绑定到这样的更新。
【解决方案3】:

以下是在不分离会话且无需使用<prefix> 击键的情况下更改 tmux 会话的工作目录的方法:

(选项一)tmux命令提示符处输入目录:

tmux command-prompt "attach -c %1"

...将打开一个命令提示符,然后键入您想要的工作目录~/my/dir 并按ENTER

(选项 2) 在窗格内命令行中提供目录:

# Execute this in one of the shell panes of within your tmux session:
tmux command-prompt -I $PWD -P "New session dir:" "attach -c %1"

使用这种方法,新目录的提示会预先填充启动该命令的窗格的当前目录。当然,如果你愿意,你可以用其他任何东西代替$PWD

想要一个shell函数?

我已将此添加到我的 shell 初始化中:

# Change the current directory for a tmux session, which determines
# the starting dir for new windows/panes:
function tmux-cwd {
    tmux command-prompt -I $PWD -P "New session dir:" "attach -c %1"
 }

使用所有这些选项,任何未来的新窗口都将在给定目录中启动。

注意: attachattach-sessiona 都是彼此的别名。 tmux command-prompt还有很多其他的功能,值得reading the man page

【讨论】:

  • 关于选项 2:命令提示符 -P 选项似乎需要 tmux 版本 > 2.8。您还明确表示不需要<prefix>,但作为赠品:<prefix>: 然后attach -c "#{pane_current_path}" 也很好用。感谢unix.stackexchange.com/a/274551/348688
  • 您可以使用tmux command-prompt "attach -c %1 $PWD" 并按回车键将当前目录设置为新窗格中的默认目录。
【解决方案4】:

在命令提示符或绑定中使用attach-session -c

我有绑定自动使用当前目录,使用提供的pane_current_path var。

我已将此绑定到M-c,以更新当前路径。

# tmux.conf
# set default directory for new windows in this session to current directory:
bind M-c attach-session -c "#{pane_current_path}"

同样,当我只想要当前目录中的另一个窗口而不更改默认值时,我在C 上有一个绑定:

# tmux.conf
# open a new window in the current directory
bind C new-window -c "#{pane_current_path}"

我的绑定:

  • c:在会话默认目录中打开一个新窗口[默认绑定]
  • C:在当前目录打开一个新窗口
  • M-c: 设置会话默认目录为当前目录

Tmuxing 快乐!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多