如何在 tmux 的当前目录下创建一个新窗口?

如何在 tmux 的当前目录下创建一个新窗口?

可以打开一个new-window,其工作目录设置为我当前所在的目录。我正在使用桀骜,如果重要的话。

答案1

当前 (1.9a) Tmux 手册页列出了-c start-directory某些命令的可选参数,包括new-windowsplit-window。它还包含格式变量pane_current_path,它引用 Current path if available.

通过组合这些,我们可以使用当前工作目录打开一个新窗口。
new-window -c "#{pane_current_path}"
如果当前路径包含空格,则需要引号。

如果要垂直分割当前窗格,请使用
split-window -c "#{pane_current_path}"
或 进行水平分割
split-window -h -c "#{pane_current_path}"

要使键绑定默认使用当前工作目录打开新的拆分和窗口,请将以下内容添加到您的.tmux.conf.周围的引号"是告诉 Tmux 它不应该开始一个字符串,而是绑定键"

bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"

答案2

开始于多路复用器1.9 该default-path选项已被删除,因此您需要将该-c选项与new-window, 和 一起使用split-window(例如,通过重新绑定c, ", 和%绑定以包含
-c '#{pane_current_path}')。有关详细信息,请参阅此问题的其他一些答案。


相关功能已登陆多路复用器2012 年 2 月上旬的 SVN 主干。多路复用器包含此代码的构建,多路复用器调用的键绑定new-window将创建一个新窗口,其当前工作目录与当前窗格的活动进程相同(只要default-path会话选项为空;默认情况下)。split-window当通过绑定调用该命令时,该命令创建的窗格也是如此。

它使用特殊的特定于平台的代码,因此目前仅支持某些操作系统:Darwin (OS X)、FreeBSD、Linux、OpenBSD 和 Solaris。

这应该会在下一版本中提供多路复用器(1.7?)。


多路复用器1.4,我一般就用

tmux neww

在已经具有所需当前工作目录的 shell 中。

但是,如果我预计需要创建许多具有相同当前工作目录的窗口(或者我希望能够使用通常的 <prefix>c键绑定来启动它们),那么我可以default-path通过以下方式设置会话选项

tmux set-option default-path "$PWD"

在已经具有所需当前工作目录的 shell 中(尽管您显然可以从任何目录执行此操作,只需指定值即可)。

如果default-path设置为非空值,则将使用其值,而不是从命令行调用中“继承”当前工作目录tmux neww

多路复用器常问问题有一个标题为“如何在与当前窗口相同的目录中打开新窗口?”的条目描述了另一种方法;虽然有点复杂。

答案3

使用new-window -c "#{pane_current_path}"

您可以将以下内容添加到您的文件中~/.tmux.conf以使其持久化(假设默认键绑定):

bind  c  new-window      -c "#{pane_current_path}"
bind  %  split-window -h -c "#{pane_current_path}"
bind '"' split-window -v -c "#{pane_current_path}"

设定default-path已删除从 1.9(2014 年 2 月发布)开始。在更改中,作者建议在和命令中使用-c "#{pane_current_path}"or 。-c "$PWDnew-windowsplit-window

也在这个回答了重复的问题

答案4

tmux split-window -c当我尝试将它们作为绑定(特别是)时,其他答案对我不起作用。但我已经制定了自己的解决方案,我已经使用了一年多,该解决方案适用于新窗口和拆分:

~/.bashrc:

PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

~/.tmux.conf:

unbind-key c
bind-key c run-shell 'tmux new-window "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key C new-window

bind-key - run-shell 'tmux split-window -v "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key | run-shell 'tmux split-window -h "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"

至少可以与 $(tmux -V) 1.8 一起使用。查看注释掉的行这里适用于没有 show-environment 命令的旧 tmux 的版本。

相关内容