将 tmux 键绑定到多个命令

jac*_*hab 46 tmux

我启动多窗格 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 "..."
Run Code Online (Sandbox Code Playgroud)

Pee*_*eja 50

Todd Freed 是对的,“正确”的方法是使用\;. 有点。但有一个障碍。

你看,你通过给 tmux 连词将一系列 tmux 命令连接在一起;。因此,在 tmux 来源的文件中,您可能会说

new-session "monitor1" ; split-window -v "monitor2"
Run Code Online (Sandbox Code Playgroud)

如果出于某种原因,您希望在一行中完成所有操作。现在,你可以给一个行复合语句的tmux命令从外壳也不过;必须这样逃脱了外壳将其解释为另有说法为tmux。因此,shell 中的等价物是

$ tmux new-session "monitor1" \; split-window -v "monitor2"
Run Code Online (Sandbox Code Playgroud)

类似地,tmuxbind-key命令接受一系列参数,它们是 tmux 命令和在按下键时运行的参数。如果您想C-q从 tmux 来源的文件内部绑定到上述序列,您会说

bind-key -n C-q new-session "monitor1" \; split-window -v "monitor2"
Run Code Online (Sandbox Code Playgroud)

在这里,我们对; from tmux 进行了转义,因此 tmux 不会将其解释为bind-key命令的结尾,而是作为另一个参数bind-key告诉它形成复合命令作为C-q键的绑定值。

那么当我们想让 tmux 从 shell 做这件事时会发生什么呢?一大堆逃跑。

$ tmux bind-key -n C-q new-session "monitor1" \\\; split-window -v "monitor2"
Run Code Online (Sandbox Code Playgroud)

首先,我们要逃走了\ ,并;从每个外壳,使shell两个字符传递\;作为参数tmux。然后这会转义;from 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...
Run Code Online (Sandbox Code Playgroud)

进而:

$ tmux source split-windows.tmux  # (or even make an alias for this)
Run Code Online (Sandbox Code Playgroud)

以这种方式维护会容易得多。

  • 为了使从命令行绑定到多个命令的键看起来不那么可怕,您还可以对 `\;` 进行字符串转义: `$ tmux bind-key -n Cq new-session "monitor1" '\;' 拆分窗口 -v "monitor2"` (4认同)

Tod*_*eed 17

所以真正的答案是:用反斜杠后跟分号链接命令。

bind-key C send-keys foo \; send-keys bar
Run Code Online (Sandbox Code Playgroud)

你可以把它放在你的 tmux.conf 中,或者从 tmux ":" 提示符运行


par*_*oid 1

您可以将类似的内容添加到文件的键绑定中.tmux.conf

bind q send-keys "/home/jackhab/bin/tmux-new-session.sh" \; send-keys "Enter"
Run Code Online (Sandbox Code Playgroud)

并且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
Run Code Online (Sandbox Code Playgroud)