我启动了多窗格 tmux 窗口来监控多个服务器参数。使用 Ctrl-S,我可以使用另一个监控命令打开一个新窗口。
现在我想绑定 Ctrl-Q 来打开另一个多窗格带有多个显示器的窗口。如何将一个键绑定到多个命令?我尝试将它们与 ; 和 \; 链接起来 - 没有任何帮助。请告诉我应该使用什么来代替...以下。
当我打开一个新窗口时,是否可以暂停与其重叠的后台命令?
tmux new-session "monitor1" \;\
split-window -v "monitor2" \;\
select-pane -U \;\
split-window -v -h -p 60 "monitor3" \;\
bind-key -n C-s new-window "monitor4" \;\
bind-key -n C-q "..."
答案1
Todd Freed 是对的,实现此目的的“正确”方法是使用\;
。 有点。 但有一个问题。
你看,你通过给 tmux 连接符来连接一系列 tmux 命令;
。因此,在由 tmux 提供的文件中,你可能会说
new-session "monitor1" ; split-window -v "monitor2"
tmux
如果出于某种原因,您希望将所有内容放在一行中。现在,您也可以从 shell 中将该单行复合语句提供给命令但必须;
进行转义,以便 shell 将其解释为 的另一个参数tmux
。因此,shell 中与上述等价的是
$ tmux new-session "monitor1" \; split-window -v "monitor2"
类似地,tmuxbind-key
命令接受一系列参数,这些参数是 tmux 命令和按下键时要运行的参数。如果你想C-q
从 tmux 源文件中绑定到上述序列,你可以这样说
bind-key -n C-q new-session "monitor1" \; split-window -v "monitor2"
在这里我们逃脱了;
来自 tmux,这样 tmux 就不会将其解释为命令的结束bind-key
,而是作为另一个参数来bind-key
告诉它形成一个复合命令作为C-q
键的绑定值。
那么当我们想让 tmux 从 shell 执行此操作时会发生什么?大量的转义。
$ tmux bind-key -n C-q new-session "monitor1" \\\; split-window -v "monitor2"
首先,我们必须逃离\
和每个;
来自壳,导致 shell 将这两个字符\;
作为参数传递给tmux
。然后这会;
从 tmux 中退出,导致它将整个复合语句指定为 的绑定C-q
。
现在,综上所述,如果您反复使用像这样的复杂 tmux 设置,我建议您创建一个 tmux 文件来保存它:
# In split-windows.tmux:
new-session "monitor1"
split-window -v "monitor2"
bind-key -n C-s new-window "monitor4"
# ...etc...
进而:
$ tmux source split-windows.tmux # (or even make an alias for this)
这样维护起来就容易得多。
答案2
所以真正的答案是:用反斜杠和分号来链接命令。
bind-key C send-keys foo \; send-keys bar
你可以把它放在你的 tmux.conf 中,或者从 tmux “:”提示符运行
答案3
您可以使用一个小的解决方法来做到这一点。与建议运行脚本的答案类似(这可以很好地处理您的情况),通常可以使用“run-shell”并调用 tmux 本身作为 shell 命令来完成。
bind-key z run-shell "tmux send-keys "xyz" ; tmux clear-history; clear"
它将发送“xyz”键,tmux“clear-history”命令,然后调用内置的“clear”shell。
整个字符串只是一个多个 shell 命令序列。
答案4
您可以在文件的键绑定中添加类似这样的内容.tmux.conf
:
bind q send-keys "/home/jackhab/bin/tmux-new-session.sh" \; send-keys "Enter"
你tmux-new-session.sh
可以拥有:
#! /usr/bin/env bash
tmux new-session "monitor1"
tmux split-window -v "monitor2"
tmux select-pane -U
tmux split-window -v -h -p 60 "monitor3"
...
exit