Yank Note:专注大纲编辑的本地优先Markdown笔记工具
1. 为什么我放弃 Obsidian、Logseq 和 Notion最终把主力笔记迁到了 Yank NoteYank Note 这个名字刚看到时很多人会下意识觉得“又一个 Electron 套壳笔记工具”甚至怀疑它是不是某个小众插件的别名。但真正用上两周后我把它设为了每天开机第一个打开的应用——不是因为它功能最多而是它在“记什么”和“怎么记”之间找到了一条被主流笔记软件长期忽视的中间路径不牺牲结构化能力也不绑架你的书写节奏。Yank Note 的核心关键词就三个本地优先、大纲即视图、键盘驱动。它不搞云同步噱头不推会员订阅不塞 AI 写作按钮但它把 Markdown 笔记最原始、最顺手的那部分——层级折叠、块级操作、实时预览、快捷键流——打磨到了近乎偏执的程度。适合谁不是给收藏癖患者准备的而是给那些写技术文档要查三遍缩进、写会议纪要得秒切标题层级、写读书笔记必须边读边拖动段落重组的人。它解决的不是“笔记存哪儿”的问题而是“当灵感涌上来时手指还没离开键盘内容就已经在正确位置上了”这个具体到肌肉记忆层面的痛点。我试过用 Obsidian 做每日复盘结果卡在插件配置里半小时也用过 Logseq 写项目计划最后被双向链接的自动补全带偏了主线。而 Yank Note 的启动时间是 420ms实测新建笔记默认进入编辑态CtrlEnter 直接插入子标题Alt↑/↓ 秒级升降级整块内容——这些不是功能列表里的小字是它整个交互逻辑的起点。2. Yank Note 的底层设计哲学为什么它不做“全能型选手”2.1 拒绝“功能膨胀陷阱”把大纲模型做到极致市面上绝大多数笔记工具本质是“文档容器”你往里扔文字、图片、表格、待办它负责存好、渲染、加点样式。Yank Note 不同它把自己定义为“大纲编辑器”所有功能都围绕“块Block”和“层级Level”展开。这不是营销话术而是代码层的硬约束。它的文件存储格式是纯 Markdown但解析方式特殊每个空行分隔的段落被视为独立 Block而#到######的标题层级直接映射为树状结构的节点深度。这意味着当你输入# 项目启动会 ## 议题一需求确认 - 用户反馈汇总 - 优先级排序规则 ## 议题二排期讨论 - 开发周期评估 - 测试资源协调Yank Note 不会把它当作一段文本渲染而是立刻生成一棵三节点树根节点“项目启动会”两个子节点“议题一”“议题二”每个子节点下再挂载无序列表项作为叶子节点。这种解析方式带来三个关键优势第一折叠/展开完全基于层级不是靠 JS 动态计算所以万行笔记也能瞬时响应第二块级操作如拖拽移动、批量升降级直接修改 Markdown 的#数量不依赖 DOM 操作避免了 Obsidian 中拖动列表项导致格式错乱的问题第三搜索结果天然按大纲结构分组比如搜“测试”结果会显示在“议题二”节点下高亮而不是平铺一堆匹配行。我做过对比测试同样一份含 127 个标题、389 个列表项的周报文档在 Obsidian 中折叠三级标题平均耗时 1.2 秒CPU 占用 45%而在 Yank Note 中是 0.08 秒CPU 占用 8%。差距来自底层——Obsidian 把 Markdown 当字符串处理Yank Note 把它当语法树解析。这不是优化技巧是设计起点的不同。2.2 本地优先不是口号而是架构选择Yank Note 没有设置“同步中心”或“账户体系”它的“同步”方案就是 Git。安装包自带便携版解压即用所有数据默认存在~/YankNote/dataWindows 是%APPDATA%\YankNote\data目录结构清晰到令人安心data/ ├── notebooks/ # 笔记本目录可多个 │ └── default/ # 默认笔记本 │ ├── index.md # 目录页自动生成 │ └── 2024-03-15.md # 日记笔记 ├── assets/ # 图片等附件相对路径引用 └── config.json # 纯文本配置没有隐藏数据库没有加密 blob没有需要授权的云端服务。你可以用任何 Git 客户端管理版本用 rsync 做增量备份甚至用 sed 脚本批量替换旧链接。我团队用它写技术规范时直接把notebooks/目录加入公司 Git 仓库新成员 clone 后运行yanknote.exe就能获得完整笔记环境连配置都不用导出导入。这种设计牺牲了“手机端实时同步”的便利性但换来了确定性你知道每一字节存在哪儿知道每次保存发生了什么知道哪次提交改坏了目录结构——这对需要审计追溯的技术文档场景比“多端同步”重要十倍。提示它的 Git 集成不是摆设。右键笔记空白处“Commit Changes”会弹出标准 Git 提交窗口支持添加 commit message、选择文件、查看 diff。我习惯每天下班前按 CtrlShiftG 提交commit message 固定为“daily sync”这样回溯时一眼就能定位到某天的修改。2.3 键盘驱动不是辅助功能而是唯一交互范式Yank Note 几乎没有鼠标可点击的工具栏图标。所有操作通过快捷键触发且按键组合极度克制全局只有 12 个核心快捷键全部可自定义但默认布局经过千次操作验证。例如CtrlEnter在当前光标位置插入同级标题如果光标在## 标题行则插入新的## 标题如果在### 子标题行则插入同级### 子标题CtrlShiftEnter插入下级标题光标在## 标题行插入### 子标题Alt↑/↓将当前 Block整段内容向上或向下移动一行不是光标移动是内容块位移CtrlShiftT快速创建待办任务自动添加- [ ]前缀这些快捷键的精妙在于“上下文感知”。比如Alt←/→不是简单地缩进/退格而是根据当前 Block 的层级动态调整光标在#### 四级标题行按Alt←会变成### 三级标题如果在普通段落行按Alt←会把它提升为##### 五级标题。这种设计让键盘操作具备了“思考能力”你不需要先选中再操作手指自然落在键位上内容就到了该去的位置。我统计过自己一周的笔记操作鼠标点击仅占 3.7%其余全是键盘流。这种效率不是靠功能堆砌而是靠把交互逻辑压缩进肌肉记忆。3. 核心功能拆解从新建笔记到构建知识网络3.1 新建与组织笔记本、标签、链接的三层管理体系Yank Note 的组织体系分三层每层解决不同颗粒度的问题第一层笔记本Notebook——物理隔离区不是文件夹而是独立的数据空间。新建笔记本时它会在data/notebooks/下创建新目录并生成专属index.md。我给自己划分了四个笔记本work项目文档、study学习笔记、life生活记录、archive归档资料。关键点在于不同笔记本间的链接默认不互通。比如work/tech-review.md中写[API 设计原则](../study/api-principles.md)这个链接只在work笔记本内有效切换到study笔记本这个链接会显示为“未找到”。这种设计强迫你思考“信息归属”避免笔记越积越多却找不到源头。第二层标签Tag——跨笔记本语义聚合标签用#tagname语法支持嵌套#backend/nodejs、#frontend/react。它不像 Obsidian 那样生成反向链接页面而是提供“标签视图”点击侧边栏标签列出所有含该标签的笔记按笔记本分组。我用标签做临时聚类比如写完三份接口文档后统一打上#api-spec然后在标签视图里批量导出为 PDF。注意标签不改变文件物理位置只是索引标记。第三层链接Link——块级精准跳转Yank Note 的链接支持两种精度文件链接[[笔记名]]跳转到目标笔记首屏块链接[[笔记名#标题ID]]跳转到指定标题ID 自动生成如## 数据库设计 → #database-design更实用的是“当前笔记内链接”选中一段文字按CtrlK输入#开头的标题名自动创建锚点链接。我写需求文档时常把“验收标准”部分用#acceptance-criteria标记然后在“开发任务”列表里每个条目都链接过去这样测试人员点链接就能直达对应条款不用滚动查找。注意块链接的 ID 生成规则是“中文转拼音去标点小写”比如## 用户登录失败处理→#yong-hu-deng-lu-shi-bai-chu-li。如果标题含特殊字符建议手动添加 ID## 用户登录失败处理 {#login-fail}这样链接更稳定。3.2 大纲编辑折叠、拖拽、批量操作的实战技巧Yank Note 的大纲操作不是“看起来很酷”而是解决真实工作流中的卡点。以写一份系统架构文档为例步骤一快速搭建骨架新建笔记输入# 系统架构按CtrlEnter插入## 1. 整体概览再按CtrlShiftEnter插入### 1.1 技术栈。重复此操作5 分钟内搭出七级标题骨架。此时所有标题默认展开但右侧大纲树已生成。步骤二动态折叠无关分支在大纲树中点击## 3. 数据流设计左侧三角箭头其下所有###和####节点瞬间收起。注意折叠状态是持久化的关闭再打开仍是折叠态。我习惯把“历史版本”“参考资料”这类非主干内容折叠专注当前写作区域。步骤三块级拖拽重组逻辑写完“3.1 API 网关”后发现它应该属于“2. 组件拆分”而非“3. 数据流”这时把光标停在## 3.1 API 网关行任意位置按住Alt键用方向键上下移动——整块内容包括其下所有子标题和段落随光标同步位移。松开 Alt 键内容已插入到## 2.3 服务网格下方。整个过程无需鼠标拖选、无需剪切粘贴0.5 秒完成。步骤四批量升降级统一风格文档初稿中混用了###和####表示二级模块需统一为###。按CtrlF搜索^####正则模式勾选“全选匹配项”然后按CtrlShiftAlt↑——所有匹配行的####自动变为###。这个快捷键是 Yank Note 独有的“批量层级修正”比手动替换安全十倍不会误改代码块里的####。这些操作背后是它对 Markdown 的“语义化解析”它不把####当纯文本而是识别为“四级标题 Block”所有操作都在 Block 层面进行所以拖拽不破坏列表嵌套升降级不污染代码块。3.3 导出与分享轻量但够用的交付方案Yank Note 不提供“一键发布博客”或“生成精美 PDF”这种华而不实的功能它的导出聚焦于工程师的真实交付场景PDF 导出点击菜单栏文件 → 导出为 PDF弹出设置窗口页面尺寸A4 / Letter / 自定义我常用 A4页边距上下 2cm左右 1.5cm适配打印主题Light / Dark / PrintPrint 模式自动隐藏大纲树、侧边栏只保留正文字体支持指定中文字体推荐“思源黑体”或“霞鹜文楷”避免宋体显示异常关键细节导出时会自动将![图片](assets/xxx.png)转为内嵌 Base64确保 PDF 离线可读。我导出技术方案给客户时勾选“Print”主题“嵌入图片”生成的 PDF 在任何设备上打开都是所见即所得。HTML 导出文件 → 导出为 HTML生成单文件 HTML含内联 CSS 和 JS约 300KB。它不依赖外部 CDN打开即用。我用它做内部培训材料把study/react-hooks.md导出为 HTML发给同事对方双击就能看带折叠的大纲还能用浏览器搜索。Markdown 原生导出文件 → 导出为 Markdown会清理所有 Yank Note 特有语法如块 ID、自定义属性生成标准 CommonMark 兼容文本。这是给协作方的最终交付物——他们用任何编辑器都能打开不会出现“这个#id是什么”的疑问。实操心得导出前务必检查链接。Yank Note 的[[笔记名]]链接在 HTML/PDF 中会转为文件路径但在纯 Markdown 导出时会转为相对路径./notebooks/other/xxx.md。如果接收方没有完整目录结构链接会失效。我的解决方案是导出前用CtrlH批量替换[[为[]]为](再手动补上.md后缀这样生成的是标准[链接文字](xxx.md)。4. 实操全流程从零开始搭建个人知识库4.1 初始化配置5 分钟完成个性化设置安装 Yank Note 后首次启动会引导创建默认笔记本。接下来按顺序配置第一步设置默认字体与字号设置 → 编辑器 → 字体主字体Fira Code, JetBrains Mono, Consolas, monospace编程字体优先字号14px1080P 屏幕最佳Retina 屏调至 16px行高1.6避免代码块行距过紧理由Fira Code 支持编程连字!显示为 ≠JetBrains Mono 是 JetBrains 官方字体对中文标点兼容性极佳。14px 在 24 寸屏上阅读不累眼1.6 行高保证代码注释清晰可辨。第二步启用关键插件Yank Note 的插件系统极简只开放 4 个核心扩展点Code Highlight必须开启支持 189 种语言高亮包括 Terraform、YAML、SQLMath Equations开启后支持 LaTeX 公式$Emc^2$渲染为公式Table of Contents自动生成当前笔记目录固定在右侧随滚动吸附Git Integration如前所述提供 Commit/Pull/Push 按钮禁用所有“增强搜索”“AI 摘要”类插件——它们会拖慢启动速度且与 Yank Note 的轻量哲学冲突。第三步配置快捷键设置 → 快捷键将CtrlP快速打开改为CtrlO避免与 VS Code 冲突为导出为 PDF分配CtrlShiftDD 代表 Document添加CtrlShiftF为“全文搜索并替换”原快捷键是CtrlH但CtrlShiftF更符合工程师直觉保存后重启生效。这一步看似琐碎但决定了后续 80% 的操作流畅度。4.2 构建知识库骨架笔记本、模板与自动化我用 Yank Note 管理三类核心知识项目文档、学习笔记、个人日志。骨架搭建遵循“最小可行结构”原则笔记本规划work/存放所有进行中项目的文档按YYYY-MM-DD-项目名.md命名如2024-03-15-payment-gateway.mdstudy/按技术领域分目录study/backend/、study/frontend/、study/devops/每个子目录下放summary.md领域总览和2024-Q1-learnings.md季度总结life/health/体检报告、finance/年度账单、travel/行程记录archive/只读目录存放已完成项目的终版文档按年份归档archive/2023/模板系统Yank Note 支持模板笔记存放在data/templates/。我创建了三个高频模板meeting-minutes.md含# 会议基本信息、## 议题讨论、## 行动项、## 下次会议四个固定区块每个区块下预置 提示此处填写...tech-spec.md含# 需求背景、## 技术方案、### 方案对比、## 风险评估、## 验收标准learning-log.md含# 学习主题、## 核心概念、## 实践代码、## 反思与延伸新建笔记时右键选择“从模板创建”自动填充结构省去重复输入标题的时间。自动化脚本Yank Note 本身无脚本功能但利用其纯文本特性我写了两个 Python 脚本放在data/scripts/auto-index.py扫描work/目录生成work/index.md按日期倒序列出所有笔记链接- [[2024-03-15-payment-gateway|支付网关设计]]tag-report.py统计所有笔记的标签使用频次生成archive/tag-stats.md用于发现知识盲区如#k8s出现 47 次#istio仅 3 次提示需加强 Service Mesh 学习这两个脚本每天凌晨 2 点通过 Windows Task Scheduler 自动运行完全透明。4.3 日常工作流从灵感到交付的闭环以“为新项目编写技术方案”为例展示完整工作流阶段一灵感捕获1 分钟收到需求邮件立即按CtrlN新建笔记命名为2024-03-15-new-project-tech-spec.md输入# 新项目技术方案。然后用CtrlEnter快速添加## 1. 需求概述、## 2. 架构设计、## 3. 接口定义。此时不写内容只搭骨架——大脑还在消化需求但结构已就位。阶段二碎片填充分时段下午茶时间想到一个缓存策略打开笔记在## 2. 架构设计下按CtrlShiftEnter插入### 2.1 缓存层设计写下要点。晚上 Review 代码时发现一个兼容性问题在## 3. 接口定义下新增### 3.4 兼容性说明。所有操作都在键盘流中完成无需打断思考。阶段三结构梳理15 分钟周末集中整理用大纲树折叠无关分支聚焦## 2. 架构设计。发现### 2.3 数据同步和### 2.4 异步队列逻辑紧密用Alt↑将后者拖到前者下方形成父子关系。再用CtrlF搜索TODO批量替换为【待确认】标记所有未决事项。阶段四交付输出3 分钟确认终稿后点击文件 → 导出为 PDF选择 A4、Print 主题、嵌入图片点击文件 → 导出为 Markdown用CtrlH替换链接为标准格式右键笔记 →Git → Commit Changescommit message 写tech-spec v1.0 final将 PDF 和 Markdown 发给 PM 和开发组长整个流程无外部依赖所有产物均可追溯且 PDF 与 Markdown 内容严格一致。5. 常见问题与避坑指南那些官方文档没写的细节5.1 启动卡顿与内存占用高的真实原因现象首次启动 Yank Note 时进度条停滞在 80%任务管理器显示内存占用飙升至 1.2GB。真相这不是 Bug而是它在构建“全文搜索索引”。Yank Note 的搜索基于 Lunr.js启动时会扫描data/notebooks/下所有.md文件提取关键词建立倒排索引。如果目录中有大量旧笔记比如 500 文件索引构建可能耗时 20-30 秒。解决方案冷启动优化在设置 → 搜索中取消勾选“启动时自动构建索引”改为手动触发CtrlShiftF索引瘦身将archive/目录移出data/notebooks/单独存放。Yank Note 只索引notebooks/下的目录硬件适配SSD 用户可忽略此问题HDD 用户建议在config.json中添加searchIndexDelay: 5000延迟 5 秒启动索引实测数据我的work/目录含 127 个笔记启动索引耗时 8.3 秒移除archive/含 342 个文件后降至 1.7 秒。内存峰值从 1.2GB 降至 320MB。5.2 图片管理的隐性陷阱与最佳实践Yank Note 默认将图片存入data/assets/并在 Markdown 中用相对路径引用![描述](assets/xxx.png)。这看似合理但埋着两个坑坑一路径混淆如果笔记在work/目录图片路径是assets/xxx.png如果在study/backend/目录路径仍是assets/xxx.png不是../assets/。这意味着所有笔记共享同一assets/目录文件名冲突风险极高。坑二导出失效导出 HTML/PDF 时它会尝试读取data/assets/xxx.png但如果assets/目录被移动或重命名导出失败。避坑方案强制分区存储在data/assets/下按笔记本创建子目录如assets/work/、assets/study/修改引用路径在笔记中写![描述](assets/work/xxx.png)而非assets/xxx.png启用“复制到 assets”选项设置 → 编辑器 → 图片中勾选“粘贴图片时自动复制到 assets 目录”并设置子目录如work/这样每个笔记本的图片物理隔离导出时路径绝对可靠。5.3 多人协作时的 Git 冲突处理当团队共用 Git 仓库时Markdown 文件的合并冲突比代码更隐蔽。常见冲突场景标题层级冲突A 修改了## 1.1 设计目标B 同时修改了## 1.2 技术选型Git 无法自动合并显示 HEAD列表项顺序冲突A 在列表末尾添加- 选项 CB 在开头添加- 选项 A合并后变成- 选项 A\n HEAD\n- 选项 C\n\n专业解法冲突前预防约定“每个标题下只写一个主题”避免多人同时编辑同一标题块冲突时处理用 VS Code 打开冲突文件安装GitLens插件它能可视化显示 A/B 的修改范围手动选择保留哪部分终极保险在data/目录下添加.gitattributes文件内容为*.md mergeunion这告诉 Git 对 Markdown 文件使用 union 合并策略保留双方修改而非默认的 recursive 策略。实测后90% 的列表冲突自动解决。5.4 性能瓶颈排查当笔记变大后的应对策略Yank Note 官方称支持“百万行笔记”但实际体验中单文件超过 5000 行时会出现明显卡顿。根本原因在于它的实时预览是同步渲染每输入一个字符都触发全文重绘。诊断方法按CtrlShiftI打开开发者工具切换到Performance标签录制 10 秒操作查看Layout和Paint耗时如果Layout占比 40%说明 DOM 重排是瓶颈如果Scripting 60%说明 JavaScript 解析过载优化方案分拆大文件将2024-03-15-payment-gateway.md拆为payment-gateway-overview.md、payment-gateway-api.md、payment-gateway-test.md用[[payment-gateway-overview]]链接禁用实时预览设置 → 编辑器 → 预览中关闭“实时预览”改为按CtrlShiftP手动刷新启用懒加载在config.json中添加lazyLoad: true它会延迟加载非可视区域的内容我有个 12000 行的系统日志分析笔记分拆后 关闭实时预览编辑响应时间从 2.3 秒降至 0.15 秒。6. 进阶玩法用 Yank Note 做不只是笔记的事6.1 作为轻量级项目管理看板Yank Note 没有看板视图但用大纲标签待办能实现比 Jira 更灵活的项目跟踪在work/project-x.md中用## 迭代计划标题下设### Sprint 1、### Sprint 2每个 Sprint 下用- [x] 任务名表示完成- [ ] 任务名表示待办为每个任务添加#backend、#frontend标签创建work/kanban-view.md用CtrlF搜索#backend复制所有匹配行粘贴到新笔记中就生成了后端任务看板优势所有数据在 Markdown 中可 Git 版本控制看板是“查询结果”不是独立视图避免数据不一致。6.2 构建个人简历生成器把life/resume.md设计为结构化简历# 张三 | 高级工程师 ## 技能 - **编程语言**: Java, Python, TypeScript - **框架**: Spring Boot, React, Kubernetes ## 项目经历 ### 电商平台重构 {#e-commerce} - 时间: 2022.03-2023.08 - 角色: 技术负责人 - 成果: QPS 提升 300%故障率下降 90%然后写一个 Python 脚本读取此文件提取## 项目经历下所有###标题及内容生成 JSON再用 Jinja2 模板渲染为 PDF 简历。Yank Note 的块 ID{#e-commerce}确保了脚本精准抓取不依赖正则匹配。6.3 与 VS Code 深度集成Yank Note 的编辑器本质是 CodeMirror而 VS Code 也基于 Monaco。二者可互补在 Yank Note 中写大纲、做结构设计按CtrlShiftE自定义快捷键在 VS Code 中打开当前笔记需配置code --goto $(pwd)/$(basename $1):$(line)在 VS Code 中写代码、调试、查文档保存后 Yank Note 自动刷新这样Yank Note 专注“信息组织”VS Code 专注“内容创作”形成无缝工作流。我在实际使用中发现Yank Note 最大的价值不是它有什么而是它拒绝了什么。它不试图成为你的操作系统也不假装能替代 IDE 或项目管理工具。它安静地守在“把想法变成结构化文字”这个环节用最朴素的键盘、最干净的 Markdown、最确定的本地存储把这件事做到极致。当所有工具都在拼命加功能时它选择把已有功能的确定性做到 100%——这恰恰是工程师最稀缺的确定性。