it-swarm.cn

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

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

217
Shrikant Sharat

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


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

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

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


tmux 1.4时,我通常只使用

tmux neww

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

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

tmux set-option default-path "$PWD"

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

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

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

150
Chris Johnsen

当前(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}"
293
Simon Kohlmeyer

是的,使用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命令。

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

43
mmoya

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

tmux new-window -c "$PWD"
10
mislav

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

3
Erik Westrup

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

可以解决,但是重新绑定new-window,但如果您要执行其他操作,则会变得过于冗长:而不是输入neww man tmux,您必须输入neww -c "#{pane_current_path}" man tmux,您很可能不想这样做。

有一个tmux的mod(我是作者),向tmux添加了一种适当的脚本语言,以允许使用别名,在“模式”,变量,循环等中绑定多个命令……而且,它还可以恢复该行为:在当前目录中打开新的窗口和窗格。

可以从此处的源代码构建: http://ershov.github.io/tmux/

0
Yuriy Ershov