13 个版本
| 0.7.1 | 2024年6月29日 |
|---|---|
| 0.6.4 | 2022年10月2日 |
| 0.6.0 | 2022年7月4日 |
#78 在 命令行工具
710 每月下载量
410KB
12K SLoC
mprocs
mprocs 并行运行多个命令,并单独显示每个命令的输出。
当你在项目上工作时,你经常会需要运行相同的命令列表。例如: webpack serve,jest --watch,node src/server.js。使用 mprocs,你可以将这些命令列在 mprocs.yaml 中,并运行 mprocs 来运行所有命令。然后你可以切换到正在运行的命令的输出并与它们交互。
它类似于 concurrently,但 mprocs 会单独显示每个命令的输出,并允许与进程交互(你甚至可以在 mprocs 中使用 vim)。
截图
安装
下载二进制文件(Linux、Macos、Windows)
npm(Linux、Macos、Windows)
npm install -g mprocs
yarn global add mprocs
homebrew(Macos、Linux)
brew install mprocs
cargo(所有平台)
cargo install mprocs
scoop(Windows)
scoop install mprocs
AUR(Arch Linux)
yay mprocs
yay mprocs-bin
MPR(Debian/Ubuntu)
git clone 'https://mpr.makedeb.org/mprocs'
cd mprocs/
makedeb -si
用法
- 运行
mprocs cmd1 cmd2 …(示例:mprocs "yarn test -w" "webpack serve")
或者
- 创建
mprocs.yaml文件 - 运行
mprocs命令
示例 mprocs.yaml
procs:
nvim:
cmd: ["nvim"]
server:
shell: "nodemon server.js"
webpack: "webpack serve"
tests:
shell: "jest -w"
env:
NODE_ENV: test
配置
配置有两种类型:全局和本地。 全局 配置从 ~/.config/mprocs/mprocs.yaml (或 Windows 上的 ~\AppData\Roaming\mprocs\mprocs.yaml) 加载。 本地 配置从当前目录的 mprocs.yaml 加载(或通过命令行参数设置: mprocs --config ./cfg/mprocs.yaml)。本地配置中的设置会覆盖全局配置中的设置。
- procs: 对象 - 要运行的过程。仅允许在本地配置中使用。
- shell: 字符串 - 要运行的 Shell 命令(必须提供 shell 或 cmd 中的一个)。
- cmd: 数组 - 要运行命令和参数的数组(必须提供 shell 或 cmd 中的一个)。
- cwd: 字符串 - 设置进程的工作目录。前缀
<CONFIG_DIR>将替换为配置所在目录的路径。 - env: 对象<字符串,字符串|null> - 设置环境变量。对象键是变量名称。将变量赋值为 null,以清除从父进程继承的环境变量。
- add_path: 字符串|数组 - 将条目添加到 PATH 环境变量。
- autostart: 布尔值 - 当 mprocs 启动时启动进程。默认:true。
- autorestart: 布尔值 - 当进程退出时重启进程。默认:false。注意:如果进程在启动后 1 秒内退出,它将不会重启。
- stop: "SIGINT"|"SIGTERM"|"SIGKILL"|{send-keys: 数组}|"hard-kill" - 停止进程的方式(使用
x键或在退出 mprocs 时)。
- hide_keymap_window: 布尔值 - 隐藏显示键绑定的屏幕底部的面板。
- mouse_scroll_speed: 整数 - 每次鼠标滚动滚动的行数。
- scrollback: 整数 - 滚动大小。默认:1000。
- proc_list_width: 整数 - 进程列表窗口宽度。
- keymap_procs: 对象 - 进程列表的键绑定。见 键绑定。
- keymap_term: 对象 - 终端窗口的键绑定。见 键绑定。
- keymap_copy: 对象 - 复制模式的键绑定。见 键绑定。
快捷键映射
默认键绑定可以在配置中使用 keymap_procs、keymap_term 或 keymap_copy 字段覆盖。可用命令在 远程控制 部分中记录。
存在三个键绑定级别
- 默认键绑定
~/.config/mprocs/mprocs.yaml(或 Windows 上的~\AppData\Roaming\mprocs\mprocs.yaml)./mprocs.yaml(可由 -c/--config 命令行参数覆盖)
低级别覆盖高级别的绑定。可以通过在相同级别指定 reset: true 字段来清除高级别的键绑定。
快捷键在 < 和 > 之间定义,例如:<Enter>(回车键),<Down>(向下箭头),<Up>(向上箭头),<C-q>(CTRL + q)。
keymap_procs: # keymap when process list is focused
<C-q>: { c: toggle-focus }
<C-a>: null # unbind key
keymap_term: # keymap when terminal is focused
reset: true
<C-q>: { c: toggle-focus }
<C-j>:
c: batch
cmds:
- { c: focus-procs }
- { c: next-proc }
$select 操作符
您可以根据当前操作系统定义不同的值。任何配置中的值都可以用 $select 操作符包裹。要基于当前操作系统提供不同的值,请定义一个对象
- 第一个字段
$select: os - 定义不同操作系统值的字段:
macos: value。可能值列在这里:https://doc.rust-lang.net.cn/std/env/consts/constant.OS.html。 - 字段
$else: 默认值如果未为当前操作系统定义值,将会匹配。如果当前操作系统不匹配且缺少字段$else,则 mprocs 将无法加载配置。
示例 mprocs.yaml
procs:
my process:
shell:
$select: os
windows: "echo %TEXT%"
$else: "echo $TEXT"
env:
TEXT:
$select: os
windows: Windows
linux: Linux
macos: Macos
freebsd: FreeBSD
从 package.json 运行脚本
如果您使用 mprocs 与 --npm 参数运行,它将加载 package.json 中的脚本。但是默认情况下,脚本不会运行,您可以手动启动所需的脚本。
# Run mprocs with scripts from package.json
mprocs --npm
默认快捷键映射
聚焦于进程列表
q- 退出(软杀死进程并等待然后退出)Q- 强制退出(终止进程)C-a- 聚焦输出面板x- 软杀死选定的进程(发送 SIGTERM 信号,在 Windows 上硬杀死)X- 硬杀死选定的进程(发送 SIGKILL)s- 如果未运行,则启动选定的进程r- 软杀死选定的进程,并在停止时重启它R- 硬杀死选定的进程,并在停止时重启它a- 添加新进程C- 复制选定的进程d- 删除选定的进程(进程必须首先停止)e- 重命名选定的进程k或↑- 选择上一个进程j或↓- 选择下一个进程M-1-M-8- 选择进程 1-8C-d或page down- 向下滚动输出C-u或page up- 向上滚动输出C-e- 向下滚动输出 3 行C-y- 向上滚动输出 3 行z- 放大终端窗口v- 进入复制模式
聚焦于进程输出
C-a- 聚焦进程面板
复制模式
v- 开始选择终点c- 复制选定的文本Esc- 离开复制模式C-a- 聚焦进程面板C-d或page down- 向下滚动输出C-u或page up- 向上滚动输出C-e- 向下滚动输出 3 行C-y- 向上滚动输出 3 行h或↑- 向上移动光标l或→- 向右移动光标j或↓- 向下移动光标h或←- 将光标左移
远程控制
可选地,mprocs 可以监听 TCP 端口以接收远程命令。您需要在 mprocs.yaml 文件中定义远程控制服务器地址(server: 127.0.0.1:4050)或通过 CLI 参数(mprocs --server 127.0.0.1:4050)。要向运行中的 mprocs 实例发送命令,使用 ctl 参数:mprocs --ctl '{c: quit}' 或 mprocs --ctl '{c: send-key, key: <C->}')。
命令以 YAML 编码。可用命令
{c: quit-or-ask}- 停止进程并退出。如果有任何进程正在运行,则显示确认对话框。{c: quit}- 停止进程并退出。不显示确认对话框。{c:force-quit}{c: toggle-focus}- 在进程列表和终端之间切换焦点。{c: focus-procs}- 焦点在进程列表上{c: focus-term}- 焦点在进程终端窗口上{c: zoom}- 缩放终端窗口{c:next-proc}{c:prev-proc}{c: select-proc, index: <PROCESS INDEX>}- 通过索引选择进程,顶级进程索引为 0{c:start-proc}{c:term-proc}{c:kill-proc}{c:restart-proc}{c:force-restart-proc}{c:show-add-proc}{c:add-proc,cmd: "<SHELL COMMAND>"}{c:duplicate-proc}{c:show-remove-proc}{c:remove-proc,id: "<PROCESS ID>"}{c:show-rename-proc}{c: rename-proc, name: "<NEW_NAME>"}- 重命名当前选定的进程{c:滚动-向下}{c:滚动-向上}{c:滚动-向下-行,n: <计数>}{c:滚动-向上-行,n: <计数>}{c: copy-mode-enter}- 进入复制模式{c: copy-mode-leave}- 离开复制模式{c: copy-mode-move, dir: <DIRECTION> }- 移动选择的起始或结束位置。可用方向:上/右/下/左。{c: copy-mode-end}- 开始选择选择的终点。{c: copy-mode-copy}- 将所选文本复制到剪贴板并离开复制模式。{c: send-key, key: "<KEY>"}- 向当前进程发送键。键示例:<C-a>,<Enter>{c: batch, cmds: [{c: focus-procs}, …]}- 发送多个命令
常见问题解答
mprocs 与 tmux/screen 的比较
mprocs旨在使运行重复执行的特定命令更容易,例如编译器和测试运行器。这与tmux形成对比,通常用于在每个窗口/面板中运行更长时间的生命周期进程 - 通常是一个shell。另一个区别是tmux运行一个服务器和一个客户端,这允许客户端稍后断开并重新连接,保持进程运行。mprocs更多是为了有限生命周期的进程,您会不断重新运行,但当mprocs结束时,它在其中运行的进程也会结束。
在tmux中复制不起作用
Tmux默认未启用复制逃逸序列。要启用它,请将以下内容添加到~/.tmux.conf
set -g set-clipboard on
依赖关系
~35–50MB
~1M SLoC