Lazydraw: 用于绘制图表和草图的终端 ASCII 编辑器
摘要
Lazydraw 是一个基于终端的 ASCII 编辑器,用于创建和导出图表和草图,具有诸如方框绘制、文本编辑和与多路复用器集成等功能。它基于 Bun 和 OpenTUI 构建,提供通过 npm 或 Bun 轻松安装的方式。
查看缓存全文
缓存时间: 2026/09/24 07:04
mpospirit/lazydraw
来源:https://github.com/mpospirit/lazydraw
lazydraw
lazydraw 是一款终端 ASCII 编辑器,用于快速绘制图表和草图,并支持导出至文本文件或复制到剪贴板。
npm (https://www.npmjs.com/package/lazydraw)
许可证
https://github.com/user-attachments/assets/ef0d2284-5a39-46ca-bd87-860584e53158
致谢
- ASCIIFlow (https://github.com/lewish/asciiflow) by Lewis Hemens:原始项目,也是 lazydraw 试图在终端中实现的工具。
- termDRAW (https://github.com/benvinegar/termdraw) by Ben Vinegar:证明了此类编辑器在终端中的可行性,并塑造了渲染循环的设计思路。
- OpenTUI (https://github.com/sst/opentui) by SST:整个前端构建所基于的终端 UI 引擎。
安装
lazydraw 运行在 Bun (https://bun.sh) 运行时之上,因此需要安装 Bun 1.3 或更高版本。同时,你需要一个支持鼠标操作的终端。
bun install -g lazydraw
lazydraw
如果执行 lazydraw 命令后提示找不到,说明 Bun 的全局 bin 目录不在你的 PATH 中。将其添加到你的 shell 配置文件中:
export PATH="$HOME/.bun/bin:$PATH"
使用 npm 安装同样有效,并且通常会安装到 PATH 中的某个位置:
npm install -g lazydraw
或者完全跳过安装步骤:
bunx lazydraw
在 herdr 中运行
lazydraw 附带了一个 herdr (https://herdr.dev) 插件清单,因此它可以作为你的多路复用器中的一个窗格,位于你当前工作内容的右侧:
herdr plugin install mpospirit/lazydraw
安装步骤会在克隆目录中运行 bun install --production,因此 Bun 仍需在你的 PATH 中。插件清单无法声明自己的快捷键绑定——由 herdr 控制此功能——因此请将以下内容添加到你自己的 config.toml(通过 herdr 的设置或 ~/.config/herdr/config.toml 打开),并运行 herdr server reload-config:
[[keys.command]]
key = "prefix+ctrl+d"
type = "plugin_action"
command = "mpospirit.lazydraw.open"
description = "open lazydraw"
按下 Ctrl+B 然后 Ctrl+D 将会在右侧分屏打开画布。通过更改上方的 key 来重新绑定快捷键。
运行
lazydraw # 打开上次的绘图
lazydraw architecture # 按名称打开或创建绘图
lazydraw ./diagram.ld.json
lazydraw --import notes.txt
无需打开 UI 即可导出绘图:
lazydraw export architecture --basic --comment hashes --fenced -o diagram.txt
lazydraw list
工具栏
≡ │ box select arrow line text eraser │ export │ ⟲ ⟳ │ ⚙ │ help
| | | |—|—| | ≡ | 切换绘图;新建、重命名、分支、导入、清空、删除 | | box | 拖拽角点绘制矩形 | | select | 拖拽矩形内部以移动其及附带的箭头,拖拽线条以调整大小,拖拽线端点以改变形状,拖拽空白区域以进行选择 | | arrow / line | 从起点拖拽到终点;拖拽过程中按住 Shift 或按下 f 可翻转拐点方向 | | text | 点击并输入;Enter 换行,Esc 完成 | | eraser | 拖拽擦除;会与触及的线条分离 | | export | 扩展字符或基本字符、11种注释风格、Markdown围栏、预览、复制、保存 | | ⟲ / ⟳ | 撤销 / 重做 | | ⚙ | 网格样式(lattice, checker, dots, off)、主题(terminal + 10种 IDE 主题)、选中时复制、重新居中 | | help | 当前工具的帮助信息,以及快捷键列表 |
快捷键
| 快捷键 | 操作 |
|---|---|
1–6、Alt+1–Alt+6 | 切换工具 |
r v a l t e | 切换工具:box, select, arrow, line, text, eraser |
Ctrl+Z / Ctrl+Y | 撤销 / 重做(Ctrl+Shift+Z 在支持 kitty 键盘协议的终端上也可用于重做) |
Ctrl+C Ctrl+X Ctrl+V | 复制、剪切、粘贴选区(也支持括号粘贴) |
Del / 方向键 | 擦除或微调移动选区 |
鼠标滚轮、Shift+滚轮 | 垂直/水平平移画布 |
Space+拖拽、鼠标中键拖拽 | 自由平移画布 |
Ctrl+O Ctrl+E Ctrl+S | 文件操作 / 导出 / 立即保存 |
?、Esc | 帮助;关闭弹窗、取消拖拽操作、取消选择 |
双击 Ctrl+Q | 退出;第一次按下会提示,3秒内第二次按下则退出(绘图会自动保存) |
在文本模式下,可打印按键(包括数字、q 和 ?)用于输入文本。单独选择也可将内容复制到剪贴板——设置 → 选中时复制,默认关闭。
文件
- 绘图:
${XDG_DATA_HOME:-~/.local/share}/lazydraw/drawings/.ld.json - 配置:
${XDG_CONFIG_HOME:-~/.config}/lazydraw/config.json
每次更改后 500 毫秒会自动保存绘图,退出时也会保存。
终端注意事项
- tmux: 需要设置
set -g mouse on。通过 OSC 52 复制需要设置set -g set-clipboard on。 - macOS:
Alt+数字需要设置 “Option as Meta”(或直接使用数字键)。 - 颜色: 默认
terminal主题会读取终端自身的调色板(OSC 10/11/4)并应用其配色——背景、文本和 ANSI 颜色——因此 lazydraw 呈半透明状,并与你的终端外观保持一致。设置 → 主题还提供了十种 IDE 主题,它们会绘制自己的背景:dracula、nord、tokyo-night、catppuccin、one-dark、gruvbox、monokai、night-owl、solarized-dark、github-light。不支持颜色查询的终端会回退到nord主题。 - 网格: 默认的
lattice样式在每个空单元格中绘制🭼(U+1FB7C),颜色取自背景色与文本色之间的 7% 混合,使其保持微弱。如果你的终端无法将其渲染为单元格边缘细线,请在设置中切换为checker样式。
开发
bun install
bun start # 从源码运行
bun test # 单元测试、fixture 测试和端到端测试
bun run typecheck
bun run build # 生成独立二进制文件在 dist/lazydraw
src/core是不含终端代码的纯 TypeScript。其绘图逻辑(字符连接、吸附、线条路由、box/line/select/move 工具、导出封装)移植自 ASCIIFlow 的client/。src/tui是 OpenTUI 前端:一个绘制画布、工具栏、弹窗和对话框的全屏界面。test/fixtures/asciiflow包含通过重放test/scenarios/asciiflow.json在 ASCIIFlow 自身代码中捕获的预期输出。要重新生成它们:
git clone https://github.com/lewish/asciiflow /tmp/asciiflow && (cd /tmp/asciiflow && bun install)
bun run fixtures /tmp/asciiflow
test/upstream通过一个小型兼容层,使用 ASCIIFlow 自己的规范文件对 lazydraw 的核心进行测试。
相似文章
@Ryrenz: 一块白板同时装下思维导图、流程图和自由画 GitHub 上 14.4K stars 画个流程图开专门的工具,做思维导图换另一个,想随手涂几笔又得再开一个。三个软件三套快捷键,文件散在三个地方,一个想法要跨三次工具才能表达完整。 Drawn…
Drawnix 是一款开源白板工具,集成了思维导图、流程图和自由绘画功能,支持 Mermaid 和 Markdown 转换,基于插件架构开发。
Show HN:免费Mermaid图表编辑器
一款免费、无需注册的Mermaid图表编辑器,支持实时预览、即时导出SVG/PNG,以及完全在浏览器中运行的分享链接。可选连接GitHub以从源代码自动生成架构图。
Drawsy
Drawsy 是一个集成画布与代码的 AI 工作空间,用于创意和开发任务。
Drawably: 手绘风格 UI 控件
Drawably 是一个 JavaScript 库,为网页开发提供带有动画笔刷效果的手绘风格 UI 控件。
Mermaid转ASCII艺术 (mermaid-ascii)
一个Web工具,将Mermaid图表语法转换为ASCII和Unicode框线艺术,完全在浏览器中运行,使用编译为WebAssembly的Go库实现。支持流程图、时序图、颜色和可自定义输出。