Lumen模板系统教程:用EJS变量、输入提示与光标定位打造你的结构化笔记
2026/8/27 16:00:43 网站建设 项目流程

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

第二步:用/一键调用模板

在任意笔记编辑器中:

  1. 输入/
  2. 编辑器会列出仓库中所有可用模板,可继续输入字符筛选
  3. 选中"Book"按Enter
  4. 模板正文即刻插入到当前光标处

这个斜杠命令菜单由 src/components/note-editor.tsx 中的补全逻辑实现:一旦检测到/,就拉取全部模板并按名称匹配。

EJS 变量:自动填充当前日期

模板正文使用 EJS(一款允许在模板中嵌入 JavaScript 的轻量模板引擎)渲染。目前 Lumen 提供一个内置全局变量:

变量类型说明
datestring当前日期,格式为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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询