844 字
4 分钟
Obsidian 宏|一键快速新建博客与备忘笔记
2026-06-03
  • 添加quickAdd插件,进入插件设置新建宏
  • 在宏设置界面依次添加脚本和模板
NOTE

脚本代码

create_new_post.js
module.exports = async (params) => {
QuickAdd = params;
const title = await QuickAdd.quickAddApi.inputPrompt("请输入博客标题");
const categories = ["影视剧", "相册", "memos", "简悦","历史","社论", "文学", "学习", "心理", "杂七杂八"];
const category = await QuickAdd.quickAddApi.suggester(categories, categories);
// 如果用户直接关闭窗口,防止 category 为 undefined 报错
if (!category) {
new Notice("未选择分类,已取消");
return;
}
// 获取标签
const tag1 = await QuickAdd.quickAddApi.inputPrompt("标签1 (可选)");
const tag2 = await QuickAdd.quickAddApi.inputPrompt("标签2 (可选)");
// 新增:描述和图片
const description = await QuickAdd.quickAddApi.inputPrompt("文章描述 (可选,留空则不填)");
const image = await QuickAdd.quickAddApi.inputPrompt("封面图片路径 (可选,留空则不填)");
// 构建标签数组,过滤掉空值
const tags = [tag1, tag2].filter(t => t && t.trim() !== "");
// 转换为 YAML 列表格式字符串
let tagString = "";
if (tags.length > 0) {
tagString = tags.map(t => ` - ${t}`).join("\n");
}
QuickAdd.variables["articleTitle"] = title;
QuickAdd.variables["articleCategory"] = category;
QuickAdd.variables["articleTags"] = tagString; // 直接传入格式化好的字符串
QuickAdd.variables["articleDescription"] = description || ""; // 如果为空则填空字符串
QuickAdd.variables["articleImage"] = image || ""; // 如果为空则填空字符串
QuickAdd.variables["articleTimestamp"] = QuickAdd.quickAddApi.date.now('YYYY-MM-DD');
};
NOTE

模板代码

default.md
---
title: "{{VALUE:articleTitle}}"
published: {{VALUE:articleTimestamp}}
category: {{VALUE:articleCategory}}
tags:
{{VALUE:articleTags}}
description: "{{VALUE:articleDescription}}"
draft: false
image: "{{VALUE:articleImage}}"
---
TIP

最后设置快捷键,就可以很方便的实现快速写博客


快速写备忘录也是同样的逻辑,只是js逻辑不一样而已。

shannian.js
module.exports = async (params) => {
const input = await params.quickAddApi.inputPrompt("我的碎碎念");
if (!input) return;
const now = new Date();
const dayNames = [
"周日",
"周一",
"周二",
"周三",
"周四",
"周五",
"周六"
];
const fileName =
`${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, "0")}-${String(now.getDate()).padStart(2, "0")}_${dayNames[now.getDay()]}`;
const filePath = `2026-Daily/${fileName}.md`;
const time =
`${String(now.getHours()).padStart(2, "0")}:${String(now.getMinutes()).padStart(2, "0")}`;
const trimmed = input.trim();
let finalContent;
// Todo
if (/^(todo|task|t)\s+/i.test(trimmed)) {
const text = trimmed.replace(/^(todo|task|t)\s+/i, "");
finalContent = `- [ ] ${text} @${time}`;
}
// Done
else if (/^(done|d)\s+/i.test(trimmed)) {
const text = trimmed.replace(/^(done|d)\s+/i, "");
finalContent = `- [x] ${text} @${time}`;
}
// Idea
else if (/^(idea|i)\s+/i.test(trimmed)) {
const text = trimmed.replace(/^(idea|i)\s+/i, "");
finalContent = `💡 ${text} @${time}`;
}
// Quote
else if (/^(quote|q)\s+/i.test(trimmed)) {
const text = trimmed.replace(/^(quote|q)\s+/i, "");
finalContent = `> ${text} @${time}`;
}
// Note
else if (/^(note|n)\s+/i.test(trimmed)) {
const text = trimmed.replace(/^(note|n)\s+/i, "");
finalContent = `📝 ${text} @${time}`;
}
// 原生 Markdown
else if (
trimmed.startsWith("- ") ||
trimmed.startsWith("* ") ||
trimmed.startsWith("> ") ||
trimmed.startsWith("#")
) {
finalContent = `${trimmed} @${time}`;
}
// 普通文本
else {
finalContent = `${trimmed} @${time}`;
}
let file = params.app.vault.getAbstractFileByPath(filePath);
// 文件不存在则创建
if (!file) {
// 【优化点】新建时直接写入内容,不再单独写入 # ${fileName} 标题
const content = `${finalContent}\n`;
file = await params.app.vault.create(
filePath,
content
);
} else {
const content = await params.app.vault.read(file);
// 【优化点】兼容老文件。如果老文件里有手动写的 # 标题,将其找出并保持在最上方
const titleMatch = content.match(/^# .+$/m);
if (!titleMatch) {
// 如果文件里没有 # 标题(新逻辑创建的文件),直接把新内容置顶追加
await params.app.vault.modify(
file,
`${finalContent}\n${content}`
);
} else {
// 如果是包含旧标题的老文件,依然把内容插在老标题下方
const title = titleMatch[0];
const body = content.replace(title, "").trim();
const newContent =
`${title}
${finalContent}
${body ? "\n" + body : ""}
`;
await params.app.vault.modify(
file,
newContent
);
}
}
new Notice("✅ 已记录");
};
TIP
  • t空格加文本对应todo事项
  • d空格加文对应done事项
  • i空格加文本对应idea事项
  • n空格加文本对应note事项
  • 普通直接输入文字就是普通事项

效果如下

TIP

在模板那里可以打开open设置,这样新建文档后会立刻打开这个文档,进入编辑状态,十分方便

Obsidian 宏|一键快速新建博客与备忘笔记
https://199105.xyz/posts/obsidian-宏一键快速新建博客与备忘笔记/
作者
wen
发布于
2026-06-03
许可协议
CC BY-NC-SA 4.0