【推荐】Yank Note 一款面向程序员的 Markdown 笔记应用

转载

前言

以下中的“我”为笔记作者

转知乎

我想做一款我自己(用户)可以完全掌控的笔记软件

缘起

从大学开始,我就一直在尝试使用各种笔记软件,从 Sublime Text 直接编辑文件,到使用印象笔记、OneNote等各种云笔记,最后我选择了为知笔记。

但是后来,为知笔记开始收费,越来越臃肿,反应慢,Bug 也多。最终,我放弃了它。备份笔记花了一些功夫,我开始不再相信云产品,自己电脑上的才是真正属于自己的。

于是我开始寻找一款本地笔记软件,断断续续是用了不少产品,这些当中只有 Joplin 让我使用时间最长,但也不是完全满意。后面,我还是回退到了使用 Sublime Text 写 Markdown 的方案。

最终在三年前的某一天,我决定自己写一个供自己使用的笔记工具。花了一个下午时间,我拼凑出了第一个可以使用的版本。使用 Node.js 做服务端,Vue 做前端。功能简陋到什么程度呢?只有读取和写入文件的功能;没有按钮,只有快捷键;界面随意搭在一起。完完全全就是一个功能简陋且丑陋的记事本。

我当时也不知道自己需要什么,要做出什么。后来我才慢慢找到这样的目标

界面字大不费眼 :slight_smile:
Markdown 撰写
图片文件保存在本地,导出 Markdown 文件可简单处理离线工作
支持一些流程图表绘制 plantuml mermaid
支持加密解密,用来保存账号等隐私文件,文件可单独设置密码
不需要更多花哨功能,简单够用就行
尽量少依赖三方库,也不花心思维护,杂凑在一起的功能,恰好工作即可 :slight_smile:
在文档中运行 PHP Python Node.js 代码块

而这时候,界面长这样

总的来说,这时候我还是都是按照自己想法来做这个应用,完全不考虑是否美观,是否方便,只要功能满足自己需求即可。

后来,我的一位同事觉得这个应用很实用,开始使用它。我在掘金上发了一篇文章 Markdown 编辑器 (自家用),掘友 @KDA 评论道:“求更新完善,很好用”。于是我开始想,这个东西除了我自己,是不是可以再完善完善,给其他人使用。

但是这时,才发现我还没给这个编辑器取一个名字。GitHub 仓库名是随意起的“yn”,所以顺着这个,正式起名 “Yank Note”

为了方便其他人使用,也决定采用 Electron 开发,方便启动运行。

进化

这里再思考一下,我究竟需要一款怎样的笔记应用,最后我定了下面几点原则,按照重要性排序

  1. 拒绝云服务: 数据要保存在本地,应用也要在本机运行,备份和同步的需求可以走 Git 或者云盘,私人笔记,无需协作功能。甚至于图床之类,也不要使用,就存本地。
  2. 拒绝专有格式: 使用 Markdown 文件保存所有信息,不要给我什么 json 格式或者其他格式的,万一我哪一天弃用这个软件,要能很方便迁移。
  3. 开源: 一款软件,我要长久使用,那么不能是封闭的。如果哪一天应用作者不更新了,我要能自己 fork 一份来自己维持基本的运行。
  4. 可拓展: 这款应用要具备足够的拓展性,我遇到一些自己特定的需求,或者使用软件有不顺手的地方,我要能自己写插件或者拓展来修改和实现。
  5. 克制: 应用需要保持简单,不要太臃肿,不要太花哨,不要有过多动画干扰我的操作。比如 Notion 的菜单动画,第一时间感觉很炫酷,但是使用一下就会觉得很拖沓。而它的一些工具提示又展示太快,变成操作的干扰项。这里我非常认同 Sublime Merge 的理念。Sublime Merge 是我使用过的体验最好的 Git 客户端,使用它是一种享受。
  6. 跨平台: 我同时使用 Windows,macOS,Android,iOS。我需要让这款应用是跨平台的,至少在桌面端是要跨平台的。不过我的大部分笔记和文章都是在电脑上完成,手机上只需要记录一些灵感即可,这种需求很多软件都能完成得很好,比如 iOS 自带的备忘录。另外既然文件格式也不是专属,也不绑定云服务,那么很多移动端的 Markdown 编辑器也能很好的工作,在移动端跨平台的需求就没那么强烈。

上面的原则都是为了让我可以长久使用一款软件。如果你认同上面的观点,那么 Yank Note 或许是你的菜。

我是一枚标准的程序员,后端前端嵌入式都搞过,偶尔还做下白帽子,现在主要搞前端。这让我的笔记需求有一些特殊性,下面说下我使用 Yank Note 的一些具体场景。

  1. 做笔记: 这是基本需求,我需要做的笔记中有不少代码,代码最好能方便复制和运行。比如学习一些 js 特性的时候,我会将代码片段存下来,下次查看立马就能运行。
  2. 工作日志: 刚毕业那会儿,工作上什么事情基本都能记在脑子里,现在不行了,需要有个地方记录,安排一些待办事项,工作安排等。
  3. 写文章: 我发文章比较少,很多文章都是在工作时候写方案和文档。这时候笔记应用能支持嵌入图形就比较重要。
  4. 编写工具: 平时在工作中,有不少脚本工具,之前都比较散落在各处或者说明比较少,后续使用就比较麻烦。而现在它们都统一在 Yank Note 中组织关联。很多脚本和代码都能更方便打开,也能有更丰富的说明和 UI 界面。

经过上面这些场景洗礼后,Yank Note 长这样

一些问题

完美不是没有什么可以增加的,而是没有什么可以减少的。

下面是一些用户问过我,和我做 Yank Note 的时候,考虑过的一些问题,大部分都是关于“为什么不”。

  1. Q: 为什么要采用 C/S 架构? A: 我喜欢浏览器,我平时都是在浏览器中使用 Yank Note,配合浏览器插件我可以做更多事情。现在的架构是重客户端轻服务端,未来还会继续精简服务端逻辑。
  2. Q: 为什么要使用编辑预览分开,而不是所见即所得? A: 一来是因为我喜欢文本,我喜欢控制文本,我更喜欢代码的方式来写东西。二是技术原因,富文本编辑器很难做好。我体验过不少富文本编辑器/组件,都很难达到我想要的体验,还不如直接文本来得直接。
  3. Q: 为什么没有工具条来调整格式? A: 和上一条一样,我喜欢文本,不喜欢过多的 UI。用户应该使用文本来控制格式,写 Markdown。使用 Yank Note 的用户应该是熟悉 Markdown 的。当然我也可以偷懒不做这个功能了。
  4. Q: 为什么不做成 VSCode 插件? A: VSCode 插件限制还是比较多,一些功能不能很方便实现,我还是更喜欢浏览器来得简单直接。如果你需要,这个 VSCode 插件 很不错。
  5. Q: 为什么不集成 Git 功能,自动推送到 Github? A: 我自己的几个笔记仓库都是依托 Github 储存的,所以这个需求还是比较迫切的。但是我还是想要把 Git 集成排除在 Yank Note 功能之外。每个用户都有自己的习惯来管理 Git 仓库,比如我喜欢 Sublime Merge。当然为了便捷,我也写了一个 Yank Note 插件 来快速提交和推送内容。
  6. Q: 为什么不做成在线版? A: Yank Note 从一开始就是 C/S 架构,只是现在多了 Electron 的一些功能,要做成在线版还是很容易。比如现在的 在线 Demo 就是屏蔽了接口请求的版本。但是做成 Web 服务,那么就违背了我的第一条原则,我不希望这个编辑器脱离用户的掌控。另外就是 Yank Note 因为异常开放,为了拓展性,安全问题很难考虑周全(我是业余白帽子)。
  7. Q: 为什么不做文件关联,可以直接打开 Markdown 文件的功能? A: 正如上面所说,Yank Note 异常开放,有代码运行,宏替换,HTML 解析等功能。为了更高的拓展性,几乎将内部能力完全放开,包括一些危险的能力如命令执行,任意文件读写等,因此我没做文件关联功能。只能从仓库打开,可以让用户更谨慎的打开外来文件。
  8. Q: 是否考虑做成双链笔记? A: 双链笔记很火,但是我体验过一些双链笔记软件,如 Obsidian,我发现我并不需要它。这篇文章的观点我比较赞同 请不要神化双链笔记。我实际使用笔记的体验来看,我最需要文档之间的单向链接,但是粒度不需要到“块”,到标题即可。反向关联我只需要能知道当前文档被谁引用即可。我不赞同扁平的笔记结构,就像写代码,我不赞同所有逻辑都在一个文件。我需要层级,需要能引用模块,知道当前模块被谁引用就够了。这方面 Yank Note 还要加强。

未来

这几年来我一直使用 Yank Note,开发的功能也是因为自己和用户有需求。我在开发 Yank Note 的过程中,我的编程技能也提升不少,所以哪怕是出于学习的目的,我也还会继续开发维护下去。

现在能预计到的未来几个完善的点:

  1. 增强基础体验
  2. 精简服务端代码
  3. 强化文档之间的链接
  4. 开发简单的移动端应用

如果你对 Yank Note 感兴趣,想使用或者参与贡献,可以到 Github 了解更多。

GitHub笔记介绍

Yank Note

一款面向程序员的 Markdown 笔记应用 全平台下载在线体验>>>

Download

English | 中文说明

[toc]{level: [2]}

截图

特色

  • 使用方便:使用 Monaco 内核,专为 Markdown 优化,拥有和 VSCode 一样的编辑体验。
  • 功能强大:支持历史版本回溯;可在文档中嵌入小工具、可运行的代码块、表格、Plantuml 图形、Drawio 图形、宏替换等。
  • 兼容性强:数据保存为本地 Markdown 文件;拓展功能尽量用 Markdown 原有的语法实现。
  • 插件拓展:支持用户编写自己的插件来拓展编辑器的功能。
  • 支持加密:用来保存账号等隐私文件,文件可单独设置密码。

注意事项

  • 为了更高的拓展性和方便性,Yank Note 牺牲了安全防护(命令执行,任意文件读写)。如果要用它打开外来 Markdown 文件,:warning:请务必仔细甄别文件内容是值得信任的 :warning:
  • 加密文件的加密解密操作均在前端完成,请务必牢记自己的密码。一旦密码丢失,就只能暴力破解了。

Yank-Note V3 开发计划

V3 核心目标是重构代码,提升应用健壮性、可拓展性、Markdown 渲染性能

V3 项目看板

  • 使用 Vite 构建
  • 优化 Markdown 渲染性能,支持 Vue 组件方式拓展功能
  • 重构 Electron 代码
  • 重构业务逻辑,和组件解耦
  • 完善自定义插件文档
  • 增强文档检索,引用体验
  • 重构快捷键处理层,支持自定义快捷键
  • 其他 V2 未完成的功能
  • 增加移动端

特色功能

以下功能具体使用可参考特色功能说明

  • 同步滚动: 编辑区和预览区同步滚动,预览区可独立滚动
  • 目录大纲: 预览区目录大纲快速跳转
  • 版本管理: 支持回溯文档历史版本
  • 文件加密:.c.md 结尾的文件视为加密文件
  • 自动保存: 文件编辑后自动保存,未保存文件橙色标题栏提醒(加密文档不自动保存)
  • 编辑优化: 列表自动补全
  • 粘贴图片: 可快速粘贴剪切板里面的图片,可作为文件或 Base64 形式插入
  • 嵌入附件: 可以添加附件到文档,点击在系统中打开
  • 代码运行: 支持运行 JavaScript、PHP、nodejs、Python、bash 代码
  • 待办列表: 支持显示文档中的待办进度,点击可快速切换待办状态
  • 快速打开: 可使用快捷键打开文件切换面板,以便快捷打开文件,标记的文件,全文搜索文件内容
  • 内置终端: 支持在编辑器打开终端,快速切换当前工作目录
  • 公式解析: 支持输入 katex 公式代码
  • 样式风格: Markdown 使用 GitHub 风格样式和特性
  • 数据仓库: 可定义多个数据位置以便文档分类
  • 外链转换: 将外链或 BASE64 图片转换为本地图片
  • HTML 解析: 可以直接在文档里面使用 HTML 代码,也可以使用快捷键粘贴复制 HTML 为 Markdown
  • docx 导出: 后端使用 pandoc 做转换器
  • TOC 支持: 生成 TOC 在需要生成目录的地方写入 [toc]{type: "ol", level: [1,2,3]} 即可
  • 编辑表格单元格: 双击表格单元格即可快速编辑
  • 复制标题链接: 复制标题链接路径到剪切板,便于插入到其他文件
  • 嵌入小工具: 文档支持内嵌 HTML 小工具
  • 嵌入 Plantuml 图形: 需要安装 Java,graphviz
  • 嵌入 drawio 图形: 文档支持内嵌 drawio 图形
  • 嵌入 ECharts 图形: 在文档中嵌入 Echarts 图形
  • 嵌入 Mermaid 图形: 在文档中嵌入 Mermaid 图形
  • 嵌入 Luckysheet 表格: 在文档中嵌入 Luckysheet 表格
  • 嵌套列表转脑图展示: 可将嵌套列表用脑图的方式展示
  • 元素属性书写: 可自定义元素的任意属性
  • 表格解析增强: 表格支持表格标题多行文本,列表等特性
  • 文档交叉链接跳转: 支持在文档中链接其他文档,互相跳转
  • 脚注功能: 支持在文档中书写脚注
  • 容器块: 支持类似 VuePress 默认主题的自定义容器
  • 宏替换: 支持内嵌 JavaScript 表达式动态替换文档内容
  • 图床: 支持 PicGo 图床
  • 自定义插件: 支持编写 JavaScript 插件拓展编辑器功能。插件放置在 主目录/plugins 中。参考插件开发指南

截图

截图 截图 截图 截图 截图

更新日志

v3.25.0 2022-03-02

  1. feat: 增加局域网内分享预览功能
  2. feat: 拷贝富文本/HTML增加“上传本地图片到图床”选项
  3. feat: 增加一些内置样式类
  4. upd: 升级 Drawio 版本
  5. upd: 优化导出/打印 Mermaid 样式
  6. fix: 修复编辑器自动补全可能删除整行内容问题
  7. feat(插件): 给 VIEW_ON_GET_HTML_FILTER_NODE 钩子增加 uploadLocalImage 选项

更多发布说明

支持

加我微信进交流群(备注 Yank Note)

3 个赞