![在新的 tmux 窗格中使用相同的初始命令拆分 tmux 窗口](https://linux22.com/image/28719/%E5%9C%A8%E6%96%B0%E7%9A%84%20tmux%20%E7%AA%97%E6%A0%BC%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%E5%88%9D%E5%A7%8B%E5%91%BD%E4%BB%A4%E6%8B%86%E5%88%86%20tmux%20%E7%AA%97%E5%8F%A3.png)
我有一个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}\"
命令在与当前窗格相同的目录中运行命令,这对我的工作流程很重要。如果您希望在所有新窗格上(而不仅仅是运行命令的窗格)上显示该片段,请将片段移到封闭的\${...}
.