如何将多个 tmux 命令绑定到一次击键?

如何将多个 tmux 命令绑定到一次击键?

具体来说,我试图在某些命令完成后发出通知。因此,例如,如果我重新加载配置文件,我想确认它是否有效,可以这样做:

bind R source-file "$HOME/.tmux.conf" && display-message "Configuration reloaded."

但是,不起作用。我也没有尝试过任何其他将命令串在一起的方法。

答案1

你可以使用run-shell选项,但关键是将命令与\;

在这种情况下,类似:

bind R source-file ~/.tmux.conf \; run-shell "echo 'Reload'"

运行shell shell命令
(别名:run)
在后台执行 shell 命令而不创建窗口。完成后,任何到 stdout 的输出都会以复制模式显示。如果命令未返回成功,还会显示退出状态。

答案2

在提出我的问题后,我想到了一些可能有用的东西。我试过了,它有效,你只需要为你的 tmux 配置提供多个文件。

这是解决方案,特别是与重新加载配置相关的解决方案。在您的 .tmux.conf 文件中,输入如下内容:

bind R source-file "$HOME/.tmux/reload.tmux"

在文件 ~/.tmux/reload.tmux 中添加如下内容:

source-file "$HOME/.tmux.conf" 
display-message "Configuration reloaded."

它工作完美。

答案3

使用 run-shell 方法将输出放入需要手动清除的复制缓冲区中。使用中间配置文件会增加维护第二个配置文件的开销。在我的情况下,结合这两个答案效果更好,因为我希望消息在短时间内消失,类似于 GUI 中的弹出对话框,但将所有内容保留在单个文件中。

bind R source-file ~/.tmux.conf \; display-message "Configuration reloaded"

答案4

有一个补丁允许在 tmux 内进行成熟的脚本编写,将 tcl 语言附加到其内部。

http://ershov.github.io/tmux/

此外,它还允许为“模式”击键指定任意数量的操作。

使用它,您的代码将如下所示:

bind R tcl { source-file "$HOME/.tmux.conf" ; display-message "Configuration reloaded." }

甚至更具可读性:

bind R tcl {
  source-file "$HOME/.tmux.conf"
  display-message "Configuration reloaded."
}

相关内容