可以打开new-window并将其工作目录设置为我当前所在的目录。如果使用的话,我正在使用zsh。

#1 楼

从tmux 1.9开始,删除了default-path选项,因此您需要将-c选项与new-windowsplit-window结合使用(例如,通过重新绑定c"%绑定以包括-c '#{pane_current_path}')。有关详细信息,请参见此问题的其他一些答案。


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

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

在下一版tmux(1.7?)中应该可用。


对于tmux 1.4,我通常只在已经具有所需当前工作目录的外壳中使用

tmux neww


。但是,如果我预计需要创建许多具有相同当前工作目录的窗口(或者我希望能够使用通常的 c键绑定启动它们),然后通过

tmux set-option default-path "$PWD"

设置default-path会话选项
在已经具有所需当前工作目录的外壳程序中(尽管您显然可以从任何目录执行此操作,而只需指定值即可)。

如果default-path设置为非空值,将使用其值代替“ inh”从tmux neww的命令行调用中删除当前工作目录。

tmux FAQ中有一个标题为“如何在与当前窗口相同的目录中打开新窗口?”的条目。描述了另一种方法;虽然有点令人费解。

评论


有没有一种方法可以映射 c来读取基础shell实例的工作目录(如果有)并在执行new-window之前设置默认路径。还是对tmux要求太多了:)

–恐怖的沙拉特
2011年4月27日在5:34

另一方面,甚至有可能读取底层shell的工作目录吗?我很想在状态栏中显示它。

–恐怖的沙拉特
2011年4月27日在5:34

没有可移植的方法来提取另一个进程的cwd(尽管在某些平台上是可能的(例如,Linux上的/ proc / PID / cwd))。在tmux FAQ的条目中可能有部分解决方案(它在打印提示时让shell记录其cwd,然后在记录的目录中绑定启动新shell的键)。

–克里斯·约翰森(Chris Johnsen)
2011年4月27日在7:14

好的,就我所知,这有点超出范围,并且感觉不太可靠。某事告诉我,如果没有这些,我可能会更好。

–恐怖的沙拉特
2011年4月27日在8:57

@paradroid:通过绑定完成的所有操作(默认情况下)将使用tmux服务器的cwd或default-path会话选项的值(如果已设置)。 tmux常见问题解答包含一个条目,该条目描述了一种绑定键的方法,该键将启动一个新窗口并与在当前窗口中运行的Shell的cwd绑定(“如何在与当前窗口相同的目录中打开一个新窗口?”) ,但方法相当复杂。拆分窗口和新会话(而不是neww)可能也可以这样做。

–克里斯·约翰森(Chris Johnsen)
2011年8月23日在1:53



#2 楼

当前的(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}"


评论


这对tmux 1.9不起作用吗?我不能做它预期的事情。

–埃里克·加里森(Erik Garrison)
2015年11月17日14:57

bind-key -r输入新窗口-c“#{pane_current_path}”,适用于tmux 2.1

–马斯洛
16年1月7日在10:12

在OSX的tmux 2.3中工作。不要忘记停止/终止所有现有会话以查看已应用这些绑定。

– jmgarnier
17 Mar 24 '17 at 10:19

@jmgarnier或重新提供配置文件:prefix- :,然后键入source〜/ .tmux.conf

– ijoseph
17年5月5日在21:44

@jmgarnier或只是tmux源文件.tmux.conf。

– phil294
17-10-2在21:35

#3 楼

是的,请使用new-window -c "#{pane_current_path}"。您可以在~/.tmux.conf中添加以下内容以使其持久(假定默认键绑定):

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


default-path路径设置已从上游代码中删除,因此建议使用tmux作者在-c "#{pane_current_path}"-c "$PWD命令中使用new-windowsplit-window提交消息。

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

#4 楼

使用最新版本的tmux(v1.8,但也可能在v1.7中):

tmux new-window -c "$PWD"


评论


这似乎也适用于拆分窗口,例如tmux分割窗口-v -c“ $ PWD”

–user7089
13年5月5日在17:53

$ PWD在tmux 1.9a中似乎不适合我。我不得不按照上面的建议使用pane_current_path。

–jordelver
14-10-16在13:39

#5 楼

当我尝试将它们作为绑定(特别是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命令的较旧tmuxes的版本。

#6 楼

tmux在1.8版中做到了这一点,但在1.9版中,此功能已被删除,转而使用-c标志。

可以解决此问题,但重新绑定new-window,但是如果您要运行其他内容,它将变得过于冗长:您不必输入neww man tmux,而不必键入neww -c "#{pane_current_path}" man tmux,而您很可能不想这样做。

有一个tmux的模块(我是作者)向其中添加适当的脚本语言tmux允许使用别名,在“模式”,变量,循环等中绑定多个命令。
而且,它还带回了这种行为:在当前目录中打开了新的窗口和窗格。 >
可以从此处的资源构建:http://ershov.github.io/tmux/