第3章 脚本定制 tmux 环境

2018-02-24 15:48 更新

第 3 章 脚本定制 tmux 环境

在项目上工作时,你可能需要运行一大堆的工具和程序集。如果你在做一个 web 应用,你可能需要一个命令窗口,一个文本编辑器,一个数据库命令窗口,和一个运行着你的自动化测试套件的窗口。这样就有大一堆的窗口需要管理,一大堆的命令需要输入。

想象一下你来到了你的工作站前刚坐下,准备开始为你的项目添加新的特性,然后只需要一个简单的命令就可以把这些程序运行起来,每个程序都运行在一个的 tmux 会话中,拥有它自己的面板或是窗口。我们可以使用 tmux 的客户端-服务器模型(client-server model)来创建一个定制的脚本来自动地构建开发环境、分割窗口并运行程序。我们接下来会先学习如何手动执行,然后深入学习高级的自动化工具。

3.1 使用 tmux 命令创建一个自定义安装

我们已经学习了如何使用 tmux 命令来创建新的 tmux 会话,但是 tmux 命令还有很多其它的参数可以使用。例如选择一个运行中的会话然后把它的窗口分割成面板,改变布局,甚至是在会话内运行程序。

关键参数是 -t,也就是 target。当我们有一个已命名的 tmux 会话,可以像这样连接到它:

$ tmux attach -t [session_name]

我们使用这个 target 参数来引导命令指向正确的 tmux 会话。所以,如果我们创建了一个新的名为 development 的 tmux 会话,像这样:

$ tmux new-session -s development

然后我们使用 PREFIX d 从这个会话分离出来,那么可以使用这个命令让这个会话水平分割窗口:

$ tmux split-window -h -t development

执行完命令后,如果再连接到这个会话,我们就会发现窗口已经分割成了两个面板。命令:

$ tmux attach -t development

实际上,并不需要从 tmux 会话里分离出来再发送命令。可以另开一个终端然后把窗口再次分割,但是这次我们使用垂直分割,命令如下:

$ tmux split-window -v -t development

通过这种方法可以非常简便地自定义当前已存在的工作环境。下面来看看其它的一些命令。

编写一个项目配置脚本

在第一章,我们讨论了譬如 new-sessionnew-window 的 tmux 命令。下面我们来编写一个简单的脚本,创建一个新的 tmux 会话,它含有多个窗口,有一个窗口会包含多个面板。最重要的是,我们让每个面板都运行不同的程序。

我们从创建一个新的脚本文件开始,在主目录下创建一个名为 development 的脚本。然后赋予这个文件可执行权限,这样就可以运行它了。命令如下:

$ touch ~/development
$ chmod +x ~/development

在这个新的脚本文件里,首先创建一个名为 development 的 tmux 会话,内容如下:

tmux new-session -s development -n editor -d

在创建这个会话的同时我们给它传入了一些附加的参数。首先,创建这个会话并为它命名,使用了 -s 参数。然后把初始窗口命名为 editor,然后再通过 -d 参数立即从这个新的会话中分离。

开始使用会话时,我们希望把工作目录变更到项目目录。我们把项目目录称作 devproject。当然,在变更到这个目录之前,最好先创建它,命令如下:

$ mkdir ~/devproject

目录创建之后,我们把下面一行内容添加到配置文件中,这里使用了 send-keys 命令:

tmux send-keys -t development 'cd ~/devproject' C-m

我们在这行配置的最后添加了一个 C-m(Control-M),这样就向 tmux 里发送了一个回车符。接下来我们就可以重复使用这条命令,在窗口里打开 Vim 编辑器。就像这样:

tmux send-keys development 'vim' C-m

通过这 3 个命令,我们就已经创建了一个新的会话,变更了工作目录,并打开了一个编辑器。但是我们的工作环境还没有配置完成。我们来分割一下主编辑窗口,这样就能在底部拥有一个小的终端窗口。我们使用 split-window 命令来完成这项任务。在我们的脚本里,添加这样一行:

tmux split-window -v -t development

这样就会让主窗口水平地分割。还可以在分割时指定窗口所占的百分比,像这样:

tmux split-window -v -p 10 -t development

但是我们并不会这样做,我们会把 split-window 命令放到一边,然后选择一个 tmux 默认布局—— main-horizontal ——只需要把下面的内容添加到配置中:

tmux select-layout -t development main-horizontal

我们已经创建了第一个窗口并把它分割为两个面板,但是我们需要让底部的面板需要在打开时就处于项目目录的位置。我们已经知道如何向 tmux 实例发送命令,接下来我们会学习如何向指定的面板和窗口发送命令。

指定目标面板和窗口

通过例如 send-keys 这样的命令,不仅可以指定目标会话,也可以指定窗口和面板。在第 2 章的配置文件里,我们指定了初始索引为 1,也就是说窗口从 1 开始编号(而不是从 0 开始)。但是这个初始索引并不会影响到面板的索引编号,这也就是我们为什么也要把面板的初始索引设置为 1 的原因。在下面的例子里当前窗口有两个面板,如图9(两个面板)所示:

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号