一直想找一个 Windows 下的 tmux 版本,因为最近都是在 Windows 下开发,调试和编译也是在 Windows 下进行的。没有 tmux 感觉很不自在。没想到居然找到一个 Windows 下的 tmux 版本 psmux,完全脱离 WSL Cygwin 或 MSYS2,直接在 Windows 下运行。不得不佩服这帮搞 Rust 的大兄弟,战斗力太强了。Github 地址:
https://github.com/psmux/psnet

安装
在 Windows PowerShell 下执行:
winget install psmux
验证安装成功
> psmux --version
tmux 3.3.7
psmux 3.3.7 (05cc5d4 2026-07-20)
配置文件
用户根目录下的 ~/.psmux.conf。例如,在 psmux 中把默认的 Ctrl+b 前缀键改成 Ctrl+a
> cat ~/.psmux.conf
# 将前缀键改为 Ctrl+a
set -g prefix C-a
完全兼容 tmux 配置
于是我把之前 ~/.tmux.conf 文件中的部分配置复制了过来:
# 将前缀键改为 Ctrl+a
set -g prefix C-a
# 窗口编号从 1 开始
set -g base-index 1
# 面板(pane)编号也从 1 开始(可选,看你是否也需要)
set -g pane-base-index 1
# split window
bind | split-window -h
bind _ split-window -v
# pane navigation
bind -r h select-pane -L # move left
bind -r j select-pane -D # move down
bind -r k select-pane -U # move up
bind -r l select-pane -R # move right
bind > swap-pane -D # swap current pane with the next one
bind < swap-pane -U # swap current pane with the previous one
# maximize current pane
bind + run 'cut -c3- ~/.tmux.conf | sh -s _maximize_pane "#{session_name}" #D'
# pane resizing
bind -r H resize-pane -L 2
bind -r J resize-pane -D 2
bind -r K resize-pane -U 2
bind -r L resize-pane -R 2
# window navigation
unbind n
unbind p
bind -r C-h previous-window # select previous window
bind -r C-l next-window # select next window
bind Tab last-window # move to last active window
实现类似 smug / tmuxinator / tmuxp 的功能
项目文件管理,参考:
https://github.com/psmux/psmux/blob/master/docs/use-cases.md#6-reproducible-development-environments-in-one-command
例如,新建一个名为 dev-myapp.ps1 的 powershell 脚本,内容如下:
$proj = "C:\Projects\myapp"
psmux new-session -d -s myapp -n edit -c $proj -- nvim
psmux new-window -t myapp -n server -c $proj -- pwsh -c "npm run dev"
psmux new-window -t myapp -n build -c $proj -- pwsh -c "cargo watch -x build"
psmux split-window -t myapp:build -v -c $proj -- pwsh -c "Get-Content .\dev.log -Wait"
psmux select-window -t myapp:edit
psmux attach -t myapp
防止退出
为何运行当前 powershell 脚本后,没有出现 server window,而是窗口一闪而过。
使用 -c(或 -Command)参数时,PowerShell 会在执行完指定的命令(这里是 ls)后立即退出。当 psmux 发现该窗口内运行的进程结束时,就会自动关闭这个窗口,所以你会看到它一闪而过。
在 pwsh 命令中加上了 -NoExit 参数:
加入 -NoExit 后,PowerShell 执行完 ls 会继续保持交互模式,窗口就不会自动留在那里而不会闪退。
示例
$projBackend = "D:\work\backend"
$projFrontend = "D:\work\frontend"
psmux new-session -d -s some_project -n backend -c $projBackend -- pwsh -NoExit -c "ls"
psmux new-window -t some_project -n frontend -c $projFrontend -- pwsh -NoExit -c "npm run dev"
psmux select-window -t some_project:backend
psmux attach -t some_project
放哪里
可以仿照 linux 的做法,放到用户目录的 bin 目录下,即在用户目录下新建一个 bin 目录,然后把这个 bin 目录加到系统环境变量 Path 中,这样就可以在任意目录下直接运行这个脚本了。或者放到 .local/bin 下,我发现一些 python 相关的程序已经在里面了。
至于脚本名,可以以 psmux_ 为前缀,例如 psmux_project1.ps1 等。
查看 session 列表
> psmux ls
0: 2 windows (created Fri Jul 24 19:48:29 2026)
1: 1 windows (created Fri Jul 24 19:56:15 2026)
some_project: 3 windows (created Fri Jul 24 19:44:00 2026)
kill session
psmux kill-session some_project
psmux kill-session 0
psmux kill-session 1
有了这个,就能完全脱离 WSL 了。
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式