在 tmux 中构建自动化配置

Build automation configuration in tmux

我的开发中使用了 2 个垂直堆叠的 tmux 窗格。我在上层编码,在下层构建。

我的方法是通过将以下行添加到 .tmux.conf 文件中,从上方的编码窗格发送以下键

bind b send-keys -t.- 'clear' Enter 'cmake ~Project_a/Build/' Enter

但是,除了 project_a 之外,我目前还有几个项目要处理,比如 project_b 和 project_c。每次当我在不同的项目上切换工作时,我都需要更改配置文件中的 bind d 定义。

有没有办法创建一个可以被 Tmux 调用的函数 SetProject() 并且当我输入 project_c 然后 b 键将变为project_c 的构建过程,因此我不必再每次都更改此配置文件

TL;DR: 在绑定中使用 #{pane_current_path} 和 if 语句。

AFAICT,无法让 tmux 函数接受输入。虽然可以绑定 tmux 命令以使用变量,例如

bind-key C-t display-message "words and $bash_environment_variable"

问题是 tmux 只检查你从中启动 tmux 的环境,而不是当前窗格的环境,所以你必须从 tmux 分离,设置变量,重新连接到 tmux 并重新获取资源你的 .tmux.conf 让它起作用。

我唯一能想到的是,如果您在需要构建时位于该目录中,让 tmux 检查当前窗格的路径。你可以做类似

的事情
bind-key b if-shell '[[ #{pane_current_path} =~ /path/to/projA' '<build projA>' 'if shell projB' ...

有关如何在 tmux 中正确执行多个 if 语句(可怜的 if-elif 语句)的示例,请参阅 here

如果设置正确,可能会避免 if-shell 部分,而只是将 #{pane_current_path} 作为构建命令路径的一部分。

此外,您可以在 tmux 命令中使用底部窗格的当前窗格并有目的地 select 顶部窗格。这是一个例子:

tmux send-keys -t sess:0.2 'sudo htop' Enter

会话名称在哪里,<0> 是 window 编号(除非您已更改,否则为 0 索引),<2> 是窗格编号(也为零索引并向左移动->如您所料,右上-> 底部)。