marlocarlo/psmux

GitHub: marlocarlo/psmux

用 Rust 构建的 Windows 原生终端复用器,让 Windows 用户无需 WSL 即可享受 tmux 的会话管理、窗格分割和配置生态。

Stars: 320 | Forks: 26

``` ╔═══════════════════════════════════════════════════════════╗ ║ ██████╗ ███████╗███╗ ███╗██╗ ██╗██╗ ██╗ ║ ║ ██╔══██╗██╔════╝████╗ ████║██║ ██║╚██╗██╔╝ ║ ║ ██████╔╝███████╗██╔████╔██║██║ ██║ ╚███╔╝ ║ ║ ██╔═══╝ ╚════██║██║╚██╔╝██║██║ ██║ ██╔██╗ ║ ║ ██║ ███████║██║ ╚═╝ ██║╚██████╔╝██╔╝ ██╗ ║ ║ ╚═╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ║ ║ Born in PowerShell. Made in Rust. 🦀 ║ ║ Terminal Multiplexer for Windows ║ ╚═══════════════════════════════════════════════════════════╝ ```

原生的 Windows tmux。生于 PowerShell,成于 Rust。
完整鼠标支持 · tmux 主题 · tmux 配置 · 76 条命令 · 极速

安装 · 用法 · 性能 · 兼容性 · 功能 · 按键 · 脚本 · 配置 · FAQ

# psmux **真正的 Windows tmux。** 不是移植,不是封装,不是变通方案。 psmux 是一个用 Rust 从零开始构建的 **原生 Windows 终端复用器**。它直接使用 Windows ConPTY,支持 tmux 命令语言,读取你的 `.tmux.conf`,并支持 tmux 主题。无需 WSL、Cygwin 或 MSYS2。 👀 在 Windows 上 👇 ![psmux in action](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/8db41a427e142554.gif) ## 安装 ### 使用 WinGet ``` winget install psmux ``` ### 使用 Cargo ``` cargo install psmux ``` 这会将 `psmux`、`pmux` 和 `tmux` 二进制文件安装到你的 Cargo bin 目录。 ### 使用 Scoop ``` scoop bucket add psmux https://github.com/marlocarlo/scoop-psmux scoop install psmux ``` ### 使用 Chocolatey ``` choco install psmux ``` ### 从 GitHub Releases 从 [GitHub Releases](https://github.com/marlocarlo/psmux/releases) 下载最新的 `.zip` 并添加到你的 PATH。 ### 从源码 ``` git clone https://github.com/marlocarlo/psmux.git cd psmux cargo build --release ``` 构建的二进制文件: ``` target\release\psmux.exe target\release\pmux.exe target\release\tmux.exe ``` ### 系统要求 - Windows 10 或 Windows 11 - **PowerShell 7+**(推荐)或 cmd.exe - 下载 PowerShell:`winget install --id Microsoft.PowerShell` - 或访问:https://aka.ms/powershell ## 为什么选择 psmux? 如果你在 Linux/macOS 上使用过 tmux,并希望 Windows 上也能有类似的东西,**这就是了**。 | | psmux | Windows Terminal 标签页 | WSL + tmux | |---|:---:|:---:|:---:| | 会话持久化 (分离/重连) | ✅ | ❌ | ⚠️ 仅限 WSL | | 同步窗格 | ✅ | ❌ | ✅ | | tmux 按键绑定 | ✅ | ❌ | ✅ | | 读取 `.tmux.conf` | ✅ | ❌ | ✅ | | tmux 主题支持 | ✅ | ❌ | ✅ | | 原生 Windows shell | ✅ | ✅ | ❌ | | 完整鼠标支持 | ✅ | ✅ | ⚠️ 部分 | | 零依赖 | ✅ | ✅ | ❌ (需要 WSL) | | 可脚本化 (76 条命令) | ✅ | ❌ | ✅ | 分割窗格、多窗口、会话持久化、76 条命令、完整鼠标支持、tmux 主题、126+ 格式变量、53 个 vim 复制模式按键。完整详情:**[docs/features.md](docs/features.md)** ## 性能 psmux 为速度而生。Rust release 二进制文件使用 **opt-level 3**、**full LTO** 和 **single codegen unit** 编译。争分夺秒。 | 指标 | psmux | 备注 | |--------|-------|-------| | **会话创建** | **< 100ms** | `new-session -d` 返回的时间 | | **新建窗口** | **< 80ms** | shell 启动之外的开销 | | **新建窗格 (分割)** | **< 80ms** | 与窗口相同,带有缓存的 shell 解析 | | **启动到提示符** | **~shell 启动时间** | psmux 几乎零开销;瓶颈是你的 shell | | **15+ 窗口** | ✅ 稳定 | 经过 15+ 快速窗口、18+ 窗格、5 个并发会话的压力测试 | | **快速连续创建** | ✅ 无卡顿 | 突发创建窗口/窗格,无延迟或孤儿进程 | ### 为什么这么快 - **惰性窗格调整大小**:仅调整活动窗口的窗格大小。后台窗口在切换时按需调整,避免 O(n) 的 ConPTY 系统调用 - **缓存的 shell 解析**:`which` PATH 查找使用 `OnceLock` 缓存,不会在每次生成时重复执行 - **10ms 轮询**:client-server 发现使用紧密的 10ms 轮询,以实现低于 100ms 的会话连接 - **提前写入端口文件**:服务器在生成第一个 shell *之前*写入其发现文件,以便客户端即时连接 - **8KB 读取器缓冲区**:小缓冲区大小最大限度地减少了跨窗格读取器线程的互斥争用 ## tmux 兼容性 psmux 是 Windows 上兼容性最高的 tmux 终端复用器: | 功能 | 支持 | |---------|---------| | 命令 | 已实现 **76** 条 tmux 命令 | | 格式变量 | **126+** 个变量,完整修饰符支持 | | 配置文件 | 直接读取 `~/.tmux.conf` | | 按键绑定 | 支持键表的 `bind-key`/`unbind-key` | | 钩子 | 15+ 事件钩子(`after-new-window` 等) | | 状态栏 | 完整的格式引擎,支持条件和循环 | | 主题 | 14 种样式选项,24 位颜色,文本属性 | | 布局 | 5 种布局 (even-h, even-v, main-h, main-v, tiled) | | 复制模式 | 53 个 vim 按键绑定,搜索,寄存器 | | 目标 | `session:window.pane`, `%id`, `@id` 语法 | | `if-shell` / `run-shell` | ✅ 条件配置逻辑 | | 粘贴缓冲区 | ✅ 完整的缓冲区管理 | **你现有的 `.tmux.conf` 可以直接用。** psmux 会自动读取它。安装即用。 ## 插件与主题 psmux 拥有完整的插件生态系统 —— 移植了最流行的 tmux 插件,并用 PowerShell 为 Windows 重新实现。主题、按键绑定、会话管理、剪贴板集成等。 **浏览可用的插件和主题:** [**psmux-plugins**](https://github.com/marlocarlo/psmux-plugins) **使用 TUI 安装和管理插件:** [**Tmux Plugin Panel (tppanel)**](https://github.com/marlocarlo/tppanel) —— 一个用于浏览、安装、更新和删除插件及主题的终端 UI。 | 插件 | 描述 | |--------|-------------| | [psmux-sensible](https://github.com/marlocarlo/psmux-plugins/tree/main/psmux-sensible) | psmux 的合理默认值 | | [psmux-yank](https://github.com/marlocarlo/psmux-plugins/tree/main/psmux-yank) | Windows 剪贴板集成 | | [psmux-resurrect](https://github.com/marlocarlo/psmux-plugins/tree/main/psmux-resurrect) | 保存/恢复会话 | | [psmux-pain-control](https://github.com/marlocarlo/psmux-plugins/tree/main/psmux-pain-control) | 更好的窗格导航 | | [psmux-prefix-highlight](https://github.com/marlocarlo/psmux-plugins/tree/main/psmux-prefix-highlight) | 前缀键指示器 | | [ppm](https://github.com/marlocarlo/psmux-plugins/tree/main/ppm) | 插件管理器 (类似 tpm) | **主题:** Catppuccin · Dracula · Nord · Tokyo Night · Gruvbox 快速开始: ``` # 安装插件管理器 git clone https://github.com/marlocarlo/psmux-plugins.git "$env:TEMP\psmux-plugins" ; Copy-Item "$env:TEMP\psmux-plugins\ppm" "$env:USERPROFILE\.psmux\plugins\ppm" -Recurse ; Remove-Item "$env:TEMP\psmux-plugins" -Recurse -Force ``` 然后添加到你的 `~/.psmux.conf`: ``` set -g @plugin 'psmux-plugins/ppm' set -g @plugin 'psmux-plugins/psmux-sensible' run '~/.psmux/plugins/ppm/ppm.ps1' ``` 在 psmux 内按 `Prefix + I` 以安装声明的插件。 ## 用法 使用 `psmux`、`pmux` 或 `tmux`,它们是一样的: ``` # 启动新会话 psmux pmux tmux # 启动命名会话 psmux new-session -s work tmux new-session -s work # 列出会话 psmux ls tmux ls # 附加到会话 psmux attach -t work tmux attach -t work # 显示帮助 psmux --help tmux --help ``` ## SSH 下的鼠标 当服务器运行 **Windows 11 build 22523+ (22H2+)** 时,psmux 拥有 **一流的 SSH 鼠标支持**。点击窗格、拖拽调整边框、滚动、点击标签页 —— 一切正常,支持来自任何操作系统上的任何 SSH 客户端。 ### 兼容性 | 客户端 → 服务器 | 键盘 | 鼠标 | 备注 | |---|:---:|:---:|---| | Linux → Windows 11 (22523+) | ✅ | ✅ | 完全支持 | | macOS → Windows 11 (22523+) | ✅ | ✅ | 完全支持 | | Windows 10 → Windows 11 (22523+) | ✅ | ✅ | 完全支持 | | Windows 11 → Windows 11 (22523+) | ✅ | ✅ | 完全支持 | | WSL → Windows 11 (22523+) | ✅ | ✅ | 完全支持 | | 任意系统 → Windows 10 | ✅ | ❌ | ConPTY 限制(见下文) | | 任意系统 → Windows 11 (22523 之前) | ✅ | ❌ | ConPTY 限制(见下文) | ### 本地使用 (无 SSH) | 平台 | 键盘 | 鼠标 | |---|:---:|:---:| | Windows 11 (本地) | ✅ | ✅ | | Windows 10 (本地) | ✅ | ✅ | 在 Windows 10 和 11 上本地运行 psmux 时,鼠标功能完美运行。 ### 为什么 Windows 10 上 SSH 不支持鼠标? Windows 10 的 ConPTY 在内部消耗了鼠标启用的转义序列,并未将其转发给 sshd。SSH 客户端从未收到开始发送鼠标数据的信号。这是 Windows 10 ConPTY 的限制,已在 Windows 11 (build 22523+) 中修复。键盘输入在两个版本上均可完全正常工作 —— 仅 SSH 上的鼠标受此影响。 ## 按键绑定 默认前缀:`Ctrl+b`(与 tmux 相同)。完整参考:**[docs/keybindings.md](docs/keybindings.md)** | 按键 | 动作 | |-----|--------| | `Prefix + c` | 创建新窗口 | | `Prefix + %` / `"` | 水平 / 垂直分割窗格 | | `Prefix + 方向键` | 在窗格之间导航 | | `Prefix + d` | 从会话分离 | | `Prefix + z` | 切换窗格缩放 | | `Prefix + [` | 进入复制/滚动模式 (53 个 vim 按键绑定) | | `Ctrl+q` | 退出 | ## 脚本与自动化 76 条兼容 tmux 的命令、钩子、目标、`capture-pane`、`pipe-pane`。完整参考:**[docs/scripting.md](docs/scripting.md)** ## 配置 读取 `~/.psmux.conf`、`~/.tmux.conf` 或 `~/.config/psmux/psmux.conf`。完全兼容 tmux 语法 —— 你现有的配置可以直接使用。完整参考:**[docs/configuration.md](docs/configuration.md)** ## 许可证 MIT
标签:AI合规, cmd.exe, OpenCanary, pmux, PowerShell工具, psmux, Rust, Tmux替代品, Windows Terminal, Windows终端, 可视化界面, 威胁情报, 开发者工具, 性能优化, 检测绕过, 窗口管理, 系统工具, 终端复用器, 网络流量审计, 脚本自动化, 通知系统, 通知系统