具体来说,我试图在某些命令完成后发出通知。因此,例如,如果我重新加载配置文件,我想确认它是否有效,可以这样做:
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 语言附加到其内部。
此外,它还允许为“模式”击键指定任意数量的操作。
使用它,您的代码将如下所示:
bind R tcl { source-file "$HOME/.tmux.conf" ; display-message "Configuration reloaded." }
甚至更具可读性:
bind R tcl {
source-file "$HOME/.tmux.conf"
display-message "Configuration reloaded."
}