iTerm2 启动时进入 Tmux 模式
介绍一个最快速的方式使 iTerm2 启动默认进入 Tmux 模式。默认情况下,每次启动 iTerm2,还需要一步输入 tmux attach 进入到 tmux 模式下。
我用 Tmux 是为了管理不同项目的工作区,常见的 IDE 一般够提供了打开提供给用户一个选择项目的界面。自然而然,iTerm2 + Tmux 是否也能实现类似的能力呢?
非常简单!
核心脚本介绍
首先,一段 bash 脚本:
|
|
这段脚本的说明如下:
tmux ls
, 先输出当前可用的 session 列表,供用户输入使用;read xxx
, 读取用户输入,将希望打开的会话名称存入 tmux_session 中;tmux attach
,尝试打开会话,如果 tmux_session 为空,打开 default 会话;tmux new
,如果开启失败,尝试创建一个新的会话;
说明:由于 read
命令使用了-p
,必须要使用 bash 运行这段脚本。
配置 iTerm2 启动加载
选择 Preference -> Profile -> General -> Command -> Select “Login Sell”,并将代码放到 “Send text at start” 的输入框即可。
效果如下:
|
|
输入 “hello”,即可进入 “hello” 会话。简洁高效,有点想 IDE 启动的之后,让我们选择项目的感觉。
如果希望会话列表足够简洁,只有会话名称,可用 tmux ls
的输出格式化默认,将 tmux ls
进化为 tmux -F '\#{session_name}'
;
|
|
尝试升级改进
能不能只输入索引编号,实现快速选择呢?这种简单的 shell script 不容易实现。写了一段 Python 脚本,如下所示:
|
|
按上面的方式将脚本配置到 iTerm2 中,启动效果:
|
|
这里只是一个小 demo,tmux ls 的输入还有其他格式化变量,有兴趣可以继续扩展。代码片段 github 地址。
总体上的体验还不错,但如果使用自带的功能,岂不是更好?继续探索吧。
使用 tmux 内置菜单树
进入 tmux 模式后,默认可以用快捷键 prefix-key + s 启动 tmux 选择菜单:
|
|
而且可以使用 jk 移动选择菜单。这个有没有办法在 iTerm2 启动时直接启动呢?想法很好,实现起来也不难。
首先,通过 tmux list-keys
检查 prefix-key + s 绑定的命令 tmux 命令。
|
|
通过 choose-tree -Zs
即可拉起菜单。在 tmux 模式下,使用 tmux choose-tree -Zs
测试一下效果,选择窗口成功拉起。
那么,接下来的问题是,如何配置到 iTerm2 启动命令呢?
因为这个命令必须在 tmux 模式下运行。如何做?通过 tmux attach\; <other commands running on tmux mode>
即可实现。
完整命令如下:
|
|
试着在非 tmux 模式下测试下这段代码,看看是否能成功拉起菜单。确认没有问题后,将上面的语句配置到你的 iTerm2 启动时执行即可。
最后,为了防止首次进入没有 session,进一步优化,创建默认的 default 会话窗口。
完整 shell 代码如下:
|
|
但这里还有个缺点,默认 q 只能退出菜单,终端还是在 tmux 模式会话中,还要多一步 detach 才能退出,这算是和我们一般认为的步骤不太一样的地址吧。