如果我从窗格 A 创建一个新窗格 B 并且我没有在 A 中运行任何命令,那么将使用与 A 相同的密码创建 B,这就是我想要的。但是,如果在创建新窗格时,我在 A 中运行一个 bash 命令(实际上是 3 个链接命令的别名),该命令临时更改了密码,那么当我按下快捷键而不是在 A 中激活的密码时,就会在 A 中创建 B我正在运行命令的密码。
1)有没有办法在运行此类命令之前强制 tmux 使用 pwd 创建新窗格? 2)如果1)不可能,运行命令以保留密码的正确方法是什么?
我将 tmux 1.8 与此 .tmux.conf 一起使用:
https://github.com/slnc/dotfiles/blob/master/.tmux.conf
谢谢
答案1
只需在创建拆分时手动提供所需的目录
:split-window -c "/dir/you/want"
例如
<prefix>
, :
,split-window -c "/var/lib/apt"
解释
split-window
是创建分割的 tmux 命令,它需要很多选项来允许您指定大小、字符串插值以及-c
指定工作目录。
从man tmux | less '+/^\s*split-window'
split-window [-bdhvP] [-c start-directory] [-l size | -p percentage] [-t target-pane] [shell-command] [-F format] (alias: splitw)
通过分割目标窗格创建一个新窗格:
-h 进行水平分割,-va 进行垂直分割;如果两者均未指定,则假定为 -v。
-l 和 -p 选项分别以行(对于垂直拆分)或单元格(对于水平拆分)或百分比形式指定新窗格的大小。 -b 选项会导致在目标窗格的左侧或上方创建新窗格。所有其他选项与 new-window 命令具有相同的含义。
您也可以绑定命令,例如
bind '"' split-window -v -c "$PWD" # Split panes horizontal
答案2
bind % split-window -h -c "#{pane_current_path}"
答案3
你遇到了两个问题:
tmux
尝试从当前进程组(由 ioctl 返回)获取当前工作目录tcgetpgrp(3)
,TIOCGPGRP
因此诸如此类的变量#{pane_current_path}
将始终反映当前运行命令中的临时目录更改。tmux 版本 1.8 不会将参数
#{variables}
中的任何内容扩展-c
为split-window
.尝试使用任何扩展将在 处打开新窗格/
。这改变了1.8 至 1.9 之间。
您可以通过使用#{pane_title}
变量(alias #T
)来解决第一个问题,因为它可以使用转义序列按需更新:
首次创建窗格时,其标题是主机名。窗格的标题可以通过 OSC 标题设置序列进行设置,例如:
$ printf '\033]2;My Title\033\\'
您可以使用自定义PS1
将此序列发送到tmux
(您可能已经见过用于更改 xterm 标题的类似技巧):
if [ -n "$TMUX" ] ; then
PS1='\[\e]2;$PWD\e\\\]'$PS1
fi
这将响应交互式 bash 中的cd
(或pushd
等),但不会响应其他前台进程 - 包括任何 bash 别名,前提是它们不显示提示。
然后将您的键绑定更改tmux.conf
为:
bind-key '"' split-window -c "#T"
但您可能需要更新到较新的 tmux 版本。