在 tmux 中,如何在父窗格中运行命令时使用正确的密码创建新窗格?

在 tmux 中,如何在父窗格中运行命令时使用正确的密码创建新窗格?

如果我从窗格 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

你遇到了两个问题:

  1. tmux尝试从当前进程组(由 ioctl 返回)获取当前工作目录tcgetpgrp(3)TIOCGPGRP因此诸如此类的变量#{pane_current_path}将始终反映当前运行命令中的临时目录更改。

  2. tmux 版本 1.8 不会将参数#{variables}中的任何内容扩展-csplit-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 版本。

相关内容