在新的 tmux 窗格中使用相同的初始命令拆分 tmux 窗口

在新的 tmux 窗格中使用相同的初始命令拆分 tmux 窗口

我有一个tmux我用某个命令打开的窗口。是否可以使用一个新窗格拆分该窗口,该窗格也运行相同的命令,而不是默认命令?

重点是避免必须记住并再次输入原始命令。

答案1

#{pane_start_command}是访问用于启动当前窗格的命令的一种方法。该功能自 v1.7 (10/2012) 起可用。

bind-key S run-shell "tmux split-window \"#{pane_start_command}\""
是您问题的解决方案,使用#{pane_start_command}. (tmux版本 >= 1.9 (02/2014))。

对于版本 1.7 >= X < 1.9,您可以在文件中使用类似的内容~/tmux.conf

bind-key S run-shell "tmux split-window \"$(tmux display-message -p '#{pane_start_command}')\""
  • 替换的display-message命令提取#{pane_start_command}.
  • 该命令作为 的参数给出tmux split-window

pane_start_command如果窗格在没有命令字符串的情况下启动并且没有 ,则将为空字符串default-command,但这没关系,因为split-window如果给定空命令字符串,将启动一个普通的登录 shell。

答案2

您正在寻找的命令是split-window.从man tmux

分割窗口[-dhvP] [-c 起始目录] [-l 大小 | -p 百分比] [-t 目标窗格] [shell 命令] [-F 格式](别名:splitw)
通过分割目标窗格创建新窗格:-h 进行水平分割,-va 进行垂直分割;如果未指定,则假定为 -v。-l 和 -p 选项分别以行(用于垂直分割)或单元格(用于水平分割)或百分比为单位指定新窗格的大小。所有其他选项的含义与 new-window 命令相同。

Ctrlb您可以通过进入命令模式并:在提示符下输入来从当前窗口使用它:

splitw -v -p 50 'your command'

这会分割您当前的窗口v垂直减半(50percent)并在其中执行您的命令。

如果您经常使用此命令,您始终可以将其绑定到按键序列,例如,

bind '~' split-window -v -p 50 'htop'

答案3

不确定这是否在 tmux 版本之间发生了变化,但对我来说(tmux 3.0a),如果在没有启动命令的窗格上运行,我发现接受的答案会打开一个完全空白的窗格,而不是一个新的 shell。这对我有用:

bind C run-shell "CMD=\"#{pane_start_command}\" ; tmux split-window -v \${CMD:+ -c \"#{pane_current_path}\" \"\$CMD\"}"

这利用了替代值替代如果参数为空,则完全放弃该参数(感谢约翰·库格曼对这种方法的回答)。

附加-c \"#{pane_current_path}\"命令在与当前窗格相同的目录中运行命令,这对我的工作流程很重要。如果您希望在所有新窗格上(而不仅仅是运行命令的窗格)上显示该片段,请将片段移到封闭的\${...}.

相关内容