做笔记这件事,程序员的需求和普通用户不一样——我们要存代码片段、要层级分类、要代码高亮、要数据自己可控。CherryTree 正是为这类需求设计的:无限层级树状结构、富文本与代码高亮并存、数据存成 sqlite 或 XML 文件,不依赖任何云服务。1.7.0 版本带来了若干新特性,值得重新审视这款老牌笔记工具。
为什么树状结构对程序员重要
大多数笔记软件要么是扁平列表(比如 Simplenote),要么是两层文件夹(比如 Evernote 的笔记本→笔记)。程序员的知识结构天然是深层嵌套的:语言→框架→模块→具体问题→解决方案。五层下去,扁平列表就找不着了。
CherryTree 的树没有层级上限。你可以这样组织:
编程
└─ Python
│ └─ 标准库
│ │ └─ pathlib
│ │ │ └─ 跨平台路径拼接技巧
│ │ └─ asyncio
│ └─ 第三方库
└─ Rust
└─ DevOps
└─ Kubernetes
└─ Helm
每个节点既可以是分类容器,也可以是一篇带富文本和代码块的笔记。这种「文件夹和文档合一」的设计,省掉了「这个节点到底是分类还是内容」的纠结。
两个存储引擎,各有适用场景
CherryTree 支持两种存储方式:
| 存储方式 | 特点 | 适合场景 |
|---|---|---|
| XML(多个文件) | 每个笔记一个 XML+文件夹,可用 Git 追踪 | 需要版本控制、多人协作 |
| SQLite(单文件) | 所有数据在一个 .ctb 文件里 |
便携、单机使用、文件少 |
如果你想把笔记仓库放进 Git,选 XML 存储。下面演示如何初始化一个 Git 管理的 CherryTree 笔记库:
# 安装 CherryTree(Ubuntu/Debian)
sudo apt install cherrytree
# Fedora
sudo dnf install cherrytree
# 也可以用 flatpak
flatpak install flathub com.giuspen.CherryTree
启动后新建文档,在「文件类型」选择 XML,保存到你的仓库目录:
# 初始化 Git 仓库来追踪笔记变更
mkdir ~/dev-notes && cd ~/dev-notes
git init
# CherryTree 保存后,目录结构大致如下:
# ~/dev-notes/
# ├── cherrytree.xml # 索引文件
# ├── nodes/ # 每个节点一个子目录
# │ ├── 1_python/
# │ │ ├── node.xml
# │ │ ├── codebox_1.xml
# │ └── 2_rust/
# │ ├── node.xml
# 提交初始笔记
git add -A && git commit -m "init: cherrytree dev-notes"
之后每次编辑笔记,git diff 就能看到具体改了哪个节点的内容。这对长期维护的知识库来说非常有价值——你可以回溯任何一个知识点的演变历史。
代码高亮:笔记里直接存可读代码
CherryTree 内置了多种语言的语法高亮。在笔记中插入代码块时,选择对应语言即可:
# CherryTree 笔记中可以直接存这样的代码片段
# 以后翻笔记时,高亮让代码一目了然
import sqlite3
from pathlib import Path
def query_cherrytree_ctb(ctb_path: str) -> list[tuple]:
"""直接读取 CherryTree SQLite 存储的节点列表"""
conn = sqlite3.connect(ctb_path)
cursor = conn.execute(
"SELECT node_id, name, syntax FROM nodes ORDER BY node_id"
)
rows = cursor.fetchall()
conn.close()
return rows
# 用法:指向你的 .ctb 文件
notes = query_cherrytree_ctb("~/dev-notes.ctb")
for node_id, name, syntax in notes:
print(f"[{node_id}] {name} (syntax: {syntax})")
这段脚本展示了 CherryTree SQLite 存储的一个实用玩法——直接用 Python 读取 .ctb 文件里的节点表。这意味着你的笔记数据完全透明,随时可以用脚本批量查询、导出、迁移。没有黑箱。
从其他笔记软件迁移过来
CherryTree 支持从 NoteCase、KeepNote、Knowit、Tomboy、TuxCards、Treepad、Leo 等工具导入数据。如果你之前用 Tomboy 记笔记,迁移路径很简单:
CherryTree 菜单 → 文件 → 导入 → 从 Tomboy 笔记
→ 选择 Tomboy 的数据目录(通常在 ~/.local/share/tomboy/)
→ 确认导入
导入后 Tomboy 的每条笔记会变成 CherryTree 树中的一个节点,原有的格式和链接尽可能保留。对于从多个零散工具里「收编」知识碎片,这个功能很实用。
密码保护:敏感笔记的边界
CherryTree 支持对单个节点或整篇文档设置密码保护。保护后节点内容加密存储,未输入密码时只显示标题。这比「整库加密」更灵活——你可以把「公开的算法笔记」和「公司内部架构文档」放在同一棵树里,只锁后者。
设置方式:
右键点击节点 → 设置密码 → 输入密码并确认
需要注意:密码保护基于 7z 加密,忘记密码无法恢复。重要笔记务必另外备份明文。
1.7.0 升级建议
1.7.0 版本引入了若干新实现(具体新特性列表可查阅官方发布说明)。升级路径:
# 如果通过 apt 安装,等发行版更新仓库即可
sudo apt update && sudo apt install cherrytree
# flatpak 用户直接更新
flatpak update com.giuspen.CherryTree
# 查看当前版本
cherrytree --version
升级前建议备份笔记数据:
# SQLite 单文件存储:直接复制
cp ~/dev-notes.ctb ~/dev-notes.ctb.bak
# XML 存储:用 Git 打个标签更方便回滚
cd ~/dev-notes && git tag pre-1.7.0
什么时候该选 CherryTree,什么时候不该
适合选 CherryTree 的场景:
- 知识结构层级深,超过三层分类
- 笔记中大量代码片段需要语法高亮
- 要求数据本地存储、格式透明可查
- 需要从多种旧笔记工具迁移数据
- 想用 Git 管理笔记版本历史
不太适合的场景:
- 需要多人实时协作编辑(CherryTree 是单机工具)
- 强依赖移动端(CherryTree 目前只有 Linux 和 Windows 客户端)
- 笔记以图片、手绘为主(CherryTree 的富文本偏文字和代码)
CherryTree 不是最时髦的笔记工具,但它的设计哲学——数据透明、层级无限、代码友好——恰好对准了程序员的核心痛点。1.7.0 继续在这个方向上打磨,如果你还没试过,值得花半小时建一棵自己的笔记树。