Lumen模板系统教程:用EJS变量、输入提示与光标定位打造你的结构化笔记
【免费下载链接】lumenA free, open-source note-taking app that syncs with markdown files in your GitHub repository项目地址: https://gitcode.com/gh_mirrors/lumen1/lumen
Lumen 是一款免费开源的 Markdown 笔记应用,可将笔记以 Markdown 文件形式与 GitHub 仓库同步。它的模板系统围绕三大特性展开:EJS 变量、输入提示与光标定位,让你几秒钟生成读书笔记、会议纪要、项目计划等结构化笔记,再也不用手动复制粘贴重复的框架。本教程带你从零打造一个实用的"书籍笔记"模板。
✨模板系统的核心价值
- 📌 模板就是仓库里的一篇普通笔记,版本可控、随处可用
- ⚡ 用
/一键插入,输入提示自动弹框收集必填信息 - 🎯 光标精准定位,插入模板后直接开始正文写作
第一步:把任意笔记变成模板
在 Lumen 中,模板的本质是给笔记的 Frontmatter 加一个template字段。下面是一个"Book"读书笔记模板:
--- template: name: Book author: isbn: recommended_by: --- # #book几个要点:
template.name:模板名称,会在/菜单中显示- Frontmatter 之后的一切内容都是模板正文
- Lumen 会自动识别出这篇笔记是模板,并在模板列表中显示为"Book template",识别逻辑见 src/utils/parse-note.ts
- 模板的完整数据结构(name、description、inputs、body 四个字段)定义在 src/schema.ts
第二步:用/一键调用模板
在任意笔记编辑器中:
- 输入
/ - 编辑器会列出仓库中所有可用模板,可继续输入字符筛选
- 选中"Book"按
Enter - 模板正文即刻插入到当前光标处
这个斜杠命令菜单由 src/components/note-editor.tsx 中的补全逻辑实现:一旦检测到/,就拉取全部模板并按名称匹配。
EJS 变量:自动填充当前日期
模板正文使用 EJS(一款允许在模板中嵌入 JavaScript 的轻量模板引擎)渲染。目前 Lumen 提供一个内置全局变量:
| 变量 | 类型 | 说明 |
|---|---|---|
date | string | 当前日期,格式为YYYY-MM-DD |
给 Book 模板加上date_saved: <%= date %>,每次插入模板时都会自动填入今天的日期,再也不用手动改:
--- template: name: Book author: <%= author %> date_saved: <%= date %> ---渲染与插入的核心逻辑在 src/components/insert-template.tsx:先执行 EJS 渲染,再把结果写入编辑器。
输入提示:插入前先填好关键信息
给template增加inputs字段,插入模板前会先弹出一个输入对话框。每个输入支持四项配置:
| 字段 | 必填 | 说明 |
|---|---|---|
type | 是 | 目前仅支持string |
required | 否 | 设为true时,不填值就无法插入模板 |
default | 否 | 输入框的默认值 |
description | 否 | 输入项的描述文案 |
改造后的 Book 模板:
--- template: name: Book inputs: author: type: string required: true description: 作者是谁? author: <%= author %> isbn: recommended_by: date_saved: <%= date %> --- # #book此时插入模板会先弹出提示框(第一个输入框自动聚焦),填入作者后,值会被替换进<%= author %>占位符。这个对话框由 InsertTemplateDialog 组件实现。
💡 小贴士:模板 Frontmatter 中以#开头的行在插入时会自动移除(见 removeFrontmatterComments),你可以放心地在模板里写注释备忘。
光标定位:{cursor}让光标落在该落的地方
默认情况下,模板插入完成后光标停在内容末尾。而写读书笔记时,第一步总是要写书名——在标题位置放一个{cursor}占位符即可:
# {cursor}插入后光标会精准停在#之后,直接开始输入书名。注意:每个模板只支持一个{cursor};若模板中没有占位符,光标则落在插入内容的末尾(定位逻辑见 src/components/insert-template.tsx)。
完整实战:一篇结构完整的读书笔记模板
把三项特性组合起来,就得到了一个开箱即用的模板:
--- template: name: Book inputs: author: type: string required: true isbn: type: string author: <%= author %> isbn: <%= isbn %> date_saved: <%= date %> recommended_by: --- # {cursor} ## 为什么读这本书 ## 核心观点 - [ ] 观点一 ## 金句摘录 ## 行动项 #book插入时只需填作者(必填)和 ISBN(可选),日期自动填充,光标停在书名处,任务列表和标签一应俱全。
小结
- 📝 模板 = 普通笔记 +
templateFrontmatter,全部细节可查官方文档 docs/templates.md - ⚡ EJS 变量(
<%= date %>)让模板"会动" - 🎯
inputs输入提示负责收集信息,{cursor}负责落位 - 所有模板都保存在你的 GitHub 仓库中,随笔记一起版本化、可迁移
现在打开 Lumen,输入/,你会发现自己的第一个结构化笔记模板已经就位。
【免费下载链接】lumenA free, open-source note-taking app that syncs with markdown files in your GitHub repository项目地址: https://gitcode.com/gh_mirrors/lumen1/lumen
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考