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


13

具体来说,我正在尝试在某些命令完成后发出通知。因此,例如,如果我重新加载配置文件,我想确认一下它是否可以正常工作,这可以通过以下方式完成:

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

也就是说,然而,不能正常工作。我也没有尝试过将命令串在一起的任何其他方式。


1
它对我有效(在Debian上挤压时\;为tmux 1.3),并用作分隔符。
吉尔斯(Gillles)“所以-别再邪恶了”,

1
好吧,我发现 确实有效,这就是我在下面选择的答案的本质。我以某种方式测试了\; 太快并确定它不起作用。但我将这个问题留在这里,因为它仍然可以回答如何执行此问题。
iconoclast

Answers:


12

您可以使用run-shelloption,但是关键是要使用\;

在这种情况下,类似:

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

run-shell shell-command
(别名:run)
在不创建窗口的情况下在后台执行shell-command。完成后,所有输出到stdout的内容都会以复制模式显示。如果该命令未返回成功,则还将显示退出状态。


嘿,谢谢你的回答。我没有专门测试过,但是我认为它不会起作用,因为我用\;测试了问题中的代码;它只是运行了第二个命令,而不是第一个。而且我不知道为什么运行外壳程序会起作用,但显示消息却行不通。
iconoclast

1
好的,我已经尝试过测试您的解决方案,并且tmux一直保持锁定状态,尽管(尽管不是绝对确定)该命令。我会继续尝试,但我很确定它不会起作用...
iconoclast

它适用于tmux 1.4。“锁定”是否意味着“复制模式”-这是设计
使然

好吧,我没有锁定tmux就可以使用它。这使我想到了为什么我最初尝试使用\;的问题。
没用

1
您的答案的核心是使用\; -关于run-shell的部分并不是很重要,对于我给我的显示消息示例来说,我认为它要好得多。因此,我选择的答案是我的,而不是我的答案,但您可以介意编辑答案,以免引起误解或混淆其他人。谢谢!
iconoclast

4

在提出我的问题之后,我想到了可能有用的方法。我尝试了一下,它可以工作,您只需要为tmux配置忍受多个文件。

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

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

在文件〜/ .tmux / reload.tmux中,输入以下内容:

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

它完美地工作。


1
这实际上是它起作用的唯一方式。这里的所有其他东西都无法正常工作。
lzap

真的吗?...自从我测试另一种方法已经有一段时间了,但是如果tmux打破了这种方法,我会感到惊讶。如果您完全确定它不起作用,那么我将再次进行测试,并可能接受此答案。
iconoclast

是的,我很抱歉,以上答案确实有效:-)
lzap

1

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

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

0

有一个补丁程序允许在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."
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.