在 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> 是窗格编号(也为零索引并向左移动->如您所料,右上-> 底部)。
我的开发中使用了 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> 是窗格编号(也为零索引并向左移动->如您所料,右上-> 底部)。