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