📚 Termux 无 Root 学习开发系列
当前进度:阶段一 · 5/28
阶段一:环境搭建与终端基础
01 Termux 简介与安装
02 包管理与终端基础
03 共享存储与文件管理
04 Vim/Neovim 与 tmux 终端工作流(上):Neovim 编辑器基础
05 Vim/Neovim 与 tmux 终端工作流(当前篇 · 下)
阶段二至九共 24 篇,后续持续更新
05 Vim/Neovim 与 tmux 终端工作流(下):tmux 多窗口工作流
难度:入门→进阶 | 前置:04(上)Neovim 编辑器基础
读完本篇你将能:在 Termux 上安装并配置 tmux 终端复用器,掌握会话/窗口/窗格三层架构,编写 .tmux.conf 个性化配置,并实现 tmux + Neovim 分屏联动——一边写代码一边看运行结果。
📑 本文目录
01tmux 是什么:终端复用器
02安装 tmux 与版本确认
03核心概念:会话/窗口/窗格三层架构
04基础操作:创建、切换、分屏、关闭
05.tmux.conf 配置入门
06实战场景:SSH 断线不丢会话
07tmux + Neovim 联动实操
08分级练习
上一篇你已经配置好了 Neovim,可以在手机上流畅编辑代码了。但实际开发中你很快会遇到一个痛点:编辑代码时要切到 Shell 运行程序,看完输出又切回来——在手机小屏幕上频繁切换终端极其痛苦。tmux 就是解决这个问题的工具:它让你在一个屏幕里同时显示编辑器和运行结果,互不干扰。
tmux 是什么:终端复用器
tmux(Terminal Multiplexer)是一个终端复用器,核心能力有两点:一是在一个终端窗口里创建多个独立的 Shell 会话(窗格),二是将会话 detach 到后台运行——即使终端断开连接,会话里的进程也不会被杀死。
想象你在手机上 SSH 连到树莓派跑一个耗时任务,突然手机网络断了——如果没有 tmux,进程直接被杀,工作全部丢失。有了 tmux,进程在后台继续运行,你重新连上后 attach 回去就能看到完整输出。这在 Termux 本地也一样:Android 系统杀后台进程时,tmux 会话(配合 termux-wake-lock)能最大程度保活你的工作。
| 场景 |
没有 tmux |
有 tmux |
| 编辑 + 运行 |
来回切换终端 |
左右分屏,同时可见 |
| SSH 断线 |
进程被杀,工作丢失 |
会话保活,重连 attach |
| 多个项目 |
开多个终端 App |
一个会话多个窗口 |
| Android 杀后台 |
进程直接死亡 |
配合 wake-lock 尽量保活 |
安装 tmux 与版本确认
安装命令和 Neovim 一样简单:
验证安装版本(截至 2026 年 8 月,tmux 最新稳定版为 3.7b,修复了 3.7 初始版本的 break-pane 崩溃问题):
预期输出:
tmux 3.7 版本带来了初始的浮动窗格(floating pane)支持和复制模式行号显示,大幅提升了多窗格管理的灵活性。
核心概念:会话/窗口/窗格三层架构
tmux 的设计是三层层叠结构。理解了这三层,所有操作命令都可以推导出来。打个比方:会话是一栋办公楼,窗口是楼里的办公室,窗格是办公室里的工位——你在不同工位上做不同的事。
Session 会话
⊃
Window 窗口
⊃
Pane 窗格
•
会话(Session):最外层容器,一个会话独立持有所有窗口和窗格。可以 detach 到后台,也可以重新 attach 回来。类似浏览器的窗口
•
窗口(Window):会话内的标签页,同一时刻只显示一个窗口。用编号 0、1、2... 标识,底部状态栏可见。类似浏览器的标签页
•
窗格(Pane):窗口内的分割区域,每个窗格运行一个独立的 Shell。可以在一个窗口里水平或垂直分割出多个窗格。类似 Neovim 的分屏
基础操作:创建、切换、分屏、关闭
tmux 的所有操作都围绕一个概念:前缀键(prefix)。默认前缀键是 Ctrl+b——先按这个组合键松开,再按下一个功能键。在 Termux 软键盘上,按 CTRL 快捷栏键激活后按 b,松开后再按功能键。
会话操作
Shell / tmux 命令
|
1
2
3
4
5
6
7
8
9
10
11
|
# 新建命名会话
tmux new-session -s dev
# 在 tmux 内 detach 到后台
Ctrl+b d
# 查看现有会话
tmux ls
# 重新 attach 回会话
tmux attach -t dev
|
执行 tmux ls 时的输出示例:
Output
dev: 1 windows (created Sat Aug 15 20:30:12 2026)
test: 1 windows (created Sat Aug 15 21:05:33 2026)
窗口操作
| 快捷键 |
功能 |
Ctrl+b c |
创建新窗口 |
Ctrl+b n |
切换到下一个窗口 |
Ctrl+b p |
切换到上一个窗口 |
Ctrl+b 0-9 |
直接跳到编号对应的窗口 |
Ctrl+b & |
关闭当前窗口(需确认) |
Ctrl+b , |
重命名当前窗口 |
窗格操作:分屏与切换
窗格是 tmux 最实用的功能——在一个窗口内分割出多个区域。以下命令都在 tmux 会话内使用:
| 快捷键 |
功能 |
Ctrl+b % |
垂直分割(左右两列) |
Ctrl+b " |
水平分割(上下两行) |
Ctrl+b 方向键 |
在窗格间切换焦点 |
Ctrl+b o |
依次切换到下一个窗格 |
Ctrl+b z |
当前窗格全屏/恢复 |
Ctrl+b x |
关闭当前窗格(需确认) |
⚠️ 常见错误
按 Ctrl+b 后同时按 % 分屏 — 前缀键和功能键是先后按下,不是同时按
✓ 正确:先按 Ctrl+b,松开,再按 %。就像先敲门再进屋,不能同时做
.tmux.conf 配置入门
tmux 默认配置有几个痛点:前缀键 Ctrl+b 在手机上按起来很别扭、不支持鼠标、状态栏信息太少。通过 ~/.tmux.conf 可以改善这些问题。
输入以下配置:
~/.tmux.conf
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 前缀键改为 Ctrl+a(更顺手)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# 启用鼠标(可点击切换窗格)
set -g mouse on
# 窗口编号从 1 开始
set -g base-index 1
set -g pane-base-index 1
# 分屏快捷键改为 | 和 -
bind | split-window -h
bind - split-window -v
# 状态栏配色
set -g status-style bg=default,fg=#6366f1
|
保存后,在 tmux 内重新加载配置使其生效:
tmux 命令
# 在 tmux 内按前缀键后执行 reload
Ctrl+a 然后输入 :source-file ~/.tmux.conf
# 或直接在 Shell 中重载
tmux source-file ~/.tmux.conf
配置生效后:前缀键变为 Ctrl+a(左手小拇指就能按到)、垂直分屏变为 Ctrl+a |(形象直观)、水平分屏变为 Ctrl+a -、鼠标点击可直接切换窗格焦点。
💡 小贴士
Termux 中 tmux 的鼠标支持需要 Termux App 本身开启鼠标输入。在 Termux 设置 → Mouse → 选择"Both"或"Right"。这样你可以在手机上用外接鼠标点击切换 tmux 窗格。触摸屏则可以用单指点击切换窗格焦点。
实战场景:SSH 断线不丢会话
tmux 最经典的实战场景是 SSH 远程操作。假设你从手机 Termux SSH 连到树莓派上跑训练任务,网络突然中断。没有 tmux 的话进程直接被杀;用了 tmux,任务在后台继续运行,重连后 attach 回去即可。
完整操作流程:
1
从 Termux SSH 连接到树莓派:ssh pi@192.168.1.100
2
在树莓派上启动 tmux 会话:tmux new -s work
3
在 tmux 内执行耗时任务,如 python3 train.py
4
网络断开,SSH 连接中断,但树莓派上的 tmux 会话和任务继续运行
5
网络恢复后重新 SSH 连接:ssh pi@192.168.1.100
6
Attach 回会话:tmux attach -t work——任务输出完整可见
如果树莓派上也需要保持 tmux 会话不被系统休眠杀掉,可以配合 systemd 的 tmux@.service 或 tmux-service 让会话作为系统服务运行。这部分在第 03 篇讲解 SSH 服务时已有基础。
tmux + Neovim 联动实操
现在把上一篇配置好的 Neovim 和 tmux 组合起来,实现一个实际开发中最高频的工作流:左窗格用 Neovim 写代码,右窗格运行代码看结果。
第一步:创建项目并启动 tmux
Shell
# 创建项目目录
mkdir -p ~/projects/hello
cd ~/projects/hello
# 启动 tmux 会话
tmux new -s hello
第二步:垂直分屏并编辑
在 tmux 会话内:
tmux 操作
# 垂直分屏(左 Neovim / 右 Shell)
Ctrl+a | # 或 Ctrl+b % 使用默认配置
# 在左侧窗格打开 Neovim
nvim main.py
# 输入代码后 Esc :w 保存
# 切到右侧窗格运行代码
Ctrl+a → # 切到右窗格
python main.py
第三步:编写一个实际脚本
在 Neovim 中输入以下 Python 脚本(下一篇会正式学习 Python 开发环境,这里先体验效果):
Python (main.py)
|
1
2
3
4
5
6
7
8
9
10
11
12
|
import sys
def fibonacci(n):
"""生成前 n 个斐波那契数"""
a, b = 0, 1
result = []
for _ in range(n):
result.append(a)
a, b = b, a + b
return result
print(fibonacci(int(sys.argv[1]) if len(sys.argv) > 1 else 10))
|
保存后切换到右侧窗格运行:
Shell
python main.py
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
python main.py 15
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
修改代码后只需 Esc :w 保存,然后切到右侧窗格按 ↑ 方向键调出上一条命令重新运行——整个"编辑→保存→运行→看结果"的循环在同一个屏幕内完成,无需切换终端。
💡 小贴士
手机竖屏时分屏面积太小,建议横屏使用。如果手机支持分屏模式(小米17 Pro 支持),可以 Termux 占上半屏、其他 App 占下半屏,tmux 内再垂直分屏使用,充分利用屏幕空间。tmux 的 Ctrl+a z 可以临时全屏某个窗格,看完输出再按一次恢复。
✏️ 动手练习
🟢 基础验证
请创建一个名为 test 的 tmux 会话,在其中创建两个窗口(分别命名为 edit 和 run),然后 detach,用 tmux ls 确认会话存在,再 attach 回去。
参考解法:tmux new -s test → Ctrl+b , 改名 edit → Ctrl+b c 新窗口改名 run → Ctrl+b d detach → tmux ls → tmux attach -t test
🟡 组合应用
请编写 ~/.tmux.conf,要求:前缀键改为 Ctrl+a、启用鼠标、分屏快捷键改为 | 和 -、窗口和窗格编号从 1 开始,并添加一个自定义快捷键 Ctrl+a r 用于重载配置文件。
提示:重载快捷键的语法:bind r source-file ~/.tmux.conf \; display "Config reloaded!"。注意 \; 用于在一条 bind 命令中分隔多个操作。
🔴 开放挑战
使用 tmux 创建一个三窗格布局:上方窗格运行 htop(进程监控),左下窗格用 Neovim 编辑脚本,右下窗格运行脚本并查看输出。完成后将此布局保存为 tmux 会话,detach 后重新 attach 恢复完整布局。
方向:先水平分屏(上下),在上半窗格运行 htop;然后在下半窗格垂直分屏(左右),左侧 nvim 右侧 python。也可探索 tmux-resurrect 或 tmux-continuum 插件实现会话布局的自动保存和恢复——可搜索关键词"tmux persist session"了解方案。
📖 知识回顾
tmux 终端复用器
会话/窗口/窗格三层
前缀键操作
detach/attach 会话保活
.tmux.conf 配置
分屏编辑+运行
SSH 断线恢复
tmux + Neovim 联动
下篇预告
06 Python 开发环境搭建
将正式进入编程开发阶段,在 Termux 上搭建完整 Python 环境:pip 包管理、venv 虚拟环境、requirements.txt 依赖管理,并用 tmux + Neovim 编写第一个正式的 Python 项目