Loading... # Mori:macOS 原生工作区终端 # 一、概述 ## 1. 简介 ### A. 是什么 Mori 是一款专为 macOS 设计的原生工作区终端应用。它以项目和 Worktree 为核心组织方式,底层由 tmux 和 libghostty 提供支持。 ### B. 为什么用 - 摆脱零散的终端标签页管理,将 git 仓库作为一等项目 - 持久化会话,关闭应用后重新打开,tmux 中的所有内容仍在运行 - 原生 macOS 体验,侧边栏、命令面板、通知、键盘快捷键一应俱全 - GPU 渲染终端,基于 libghostty(Ghostty 的渲染引擎)实现 Metal 加速 - Worktree 感知,同一仓库的多个分支可并排运行,会话相互独立 ### C. 用后能做什么 - 在项目和分支间快速切换,而非在匿名标签页中迷失 - 为每个 worktree 维护独立的 tmux 会话 - 使用原生 macOS 界面管理终端工作流 ## 2. 前置知识 ### A. 必备技能 - 基本终端操作和 tmux 使用经验 - Git 工作树(worktree)概念 - macOS 基本操作 ### B. 推荐知识 - tmux 会话管理 - Ghostty 终端配置 # 二、系统架构 ## 1. 工作原理 Mori 采用分层架构,将项目、worktree、tmux 会话和 UI 层有机结合。 ```mermaid graph TD A[Project<br/>git 仓库] --> B[Worktree<br/>分支检出] B --> C[tmux Session<br/>持久化会话] C --> D1[Window 1<br/>标签页] C --> D2[Window 2<br/>标签页] C --> D3[Window 3<br/>标签页] D1 --> E1[Pane<br/>分屏] D2 --> E2[Pane<br/>分屏] D2 --> E3[Pane<br/>分屏] ```  ## 2. 应用架构 Mori 采用模块化架构设计,各组件职责清晰。 ```mermaid graph TB App[Mori App<br/>AppKit + SwiftUI] App --> Core[MoriCore<br/>模型与状态] App --> UI[MoriUI<br/>SwiftUI 视图] App --> Tmux[MoriTmux<br/>tmux CLI 集成] App --> Git[MoriGit<br/>Git 状态发现] App --> Terminal[MoriTerminal<br/>libghostty 渲染] App --> Persistence[MoriPersistence<br/>SQLite 存储] App --> IPC[MoriIPC<br/>Unix Socket + ws CLI] style App fill:#f9f,stroke:#333,stroke-width:2px style Terminal fill:#bbf,stroke:#333,stroke-width:2px style Tmux fill:#bfb,stroke:#333,stroke-width:2px ```  ## 3. 组件说明 - MoriCore:应用数据模型和可观察状态管理 - MoriUI:SwiftUI 侧边栏视图 - MoriTmux:tmux 命令行集成(actor 模式) - MoriGit:Git worktree 和状态发现(actor 模式) - MoriTerminal:libghostty 终端表面 - MoriPersistence:基于 GRDB 的 SQLite 持久化 - MoriIPC:Unix socket IPC 和 ws 命令行工具 # 三、环境准备 ## 1. 系统要求 - macOS 14(Sonoma)或更高版本 - tmux - mise(任务运行器) - Zig 0.15.2 + Xcode(用于构建 libghostty) ## 2. 安装依赖 安装 tmux: ```bash brew install tmux ``` 安装 mise: ```bash brew install mise ``` 安装 Zig(用于构建 libghostty): ```bash brew install zig ``` ## 3. 获取源码 ```bash git clone https://github.com/vaayne/mori.git cd mori ``` # 四、构建与运行 ## 1. 快速构建 Mori 使用 mise 作为任务运行器,提供以下命令: ```bash mise run build # Debug 构建 mise run build:release # Release 构建 mise run dev # 构建并运行 mise run test # 运行所有测试 mise run clean # 清理构建产物 ``` ## 2. libghostty 构建 首次运行时,`mise run build` 和 `mise run build:release` 会自动引导 libghostty XCFramework 的构建。也可以手动构建: ```bash mise run build:ghostty # 需要 Zig 0.15.2 + Xcode ``` 该命令会自动下载 Metal Toolchain(如果缺失)。 ## 3. 验证安装 ```bash mise run dev ``` 成功启动后,你将看到 Mori 的原生 macOS 界面,左侧为项目侧边栏,右侧为终端区域。 # 五、核心功能 ## 1. 项目管理 Mori 以项目为核心组织单元,每个项目对应一个 git 仓库。通过 CLI 可以管理项目: ```bash mori project list # 列出所有项目 mori open /path/to/repo # 打开项目 ``` ## 2. Worktree 管理 Worktree 是 Mori 的核心概念,允许同一仓库的不同分支并排运行: ```bash mori worktree create <project> <branch> # 创建新 worktree mori focus <project> <worktree> # 聚焦到指定 worktree ``` 每个 worktree 拥有独立的 tmux 会话,互不干扰。 ## 3. tmux 会话管理 Mori 通过 tmux CLI 集成实现会话管理。每个 worktree 对应一个 tmux session: ```bash mori send <project> <worktree> <window> "command" # 发送命令 mori new-window <project> <worktree> <name> # 创建新窗口 ``` # 六、键盘快捷键 ## 1. 核心快捷键 | 快捷键 | 功能 | |--------|------| | Cmd + T | 新建标签页(tmux window)| | Cmd + W | 关闭分屏 | | Cmd + D | 右侧分屏 | | Cmd + Shift + D | 下方分屏 | | Cmd + 1-9 | 跳转到指定标签页 | | Ctrl + Tab / Ctrl + Shift + Tab | 循环切换 worktree | ## 2. 高级功能 | 快捷键 | 功能 | |--------|------| | Cmd + Shift + N | 新建 worktree | | Cmd + Shift + P | 命令面板 | | Cmd + B | 切换侧边栏 | | Cmd + G | 打开 Lazygit | | Cmd + E | 打开 Yazi | 完整快捷键列表请参考官方文档 [docs/keymaps.md](https://github.com/vaayne/mori/blob/main/docs/keymaps.md)。 # 七、终端配置 ## 1. Ghostty 配置 Mori 使用 Ghostty 的配置系统。在 `~/.config/ghostty/config` 中自定义终端设置。 Mori 仅覆盖少量嵌入相关设置(无窗口装饰、最后一个窗口不退出)。 ## 2. 配置示例 ```bash # 字体设置 font-family = JetBrains Mono font-size = 14 # 颜色主题 background = 1e1e1e foreground = d4d4d4 # 光标样式 cursor-style = bar cursor-style-unfocused = hollow # 滚动缓冲 scroll-limit = 10000 ``` # 八、工作流示例 ## 1. 多项目开发场景 ```mermaid graph LR A[Mori 启动] --> B[选择项目] B --> C{选择 Worktree} C --> D[feature 分支] C --> E[main 分支] C --> F[hotfix 分支] D --> G[tmux Session 1] E --> H[tmux Session 2] F --> I[tmux Session 3] ```  ## 2. 典型使用流程 1. 打开 Mori 应用 2. 在侧边栏选择项目 3. 使用 Cmd + Shift + N 创建新 worktree 4. 在 worktree 中打开多个 tmux 窗口(编辑器、日志、测试等) 5. 使用 Cmd + 1-9 在窗口间快速切换 6. 关闭 Mori,tmux 会话保持运行 7. 重新打开 Mori,所有工作状态完好如初 # 九、常见问题 ## 1. 构建问题 - Zig 版本不匹配:确保使用 Zig 0.15.2 - Xcode 未安装:从 App Store 安装 Xcode - Metal Toolchain 下载失败:检查网络连接,手动下载 ## 2. 运行问题 - tmux 版本过旧:使用 brew 升级 tmux - 权限问题:确保 Mori 有访问终端的权限 ## 3. 配置问题 - Ghostty 配置不生效:检查配置文件路径 `~/.config/ghostty/config` - 快捷键冲突:在系统设置中检查是否有冲突的快捷键 # 十、参考资料 *** ## 参考资料 1. [Mori GitHub 仓库](https://github.com/vaayne/mori) 2. [mise 官方文档](https://mise.jdx.dev/) 3. [tmux 官方文档](https://github.com/tmux/tmux/wiki) 4. [Ghostty 官方网站](https://ghostty.org/) 最后修改:2026 年 03 月 22 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏