好像没注意到有能自动创建脚本的插件,有空闲基于 Templater 适当借助 AI 写了个,现在分享出来。模版的自定义程度挺高,搞懂后理论上可以依据任意类型的笔记,通过不同带 base 模版创建不同的 base 数据库。

前排提示:推荐熟悉 Templater 插件,有一定代码基础的尝试,有点小复杂。
模版功能简单介绍:依据当前打开笔记的类型(需要 yaml 区有 type 属性),分别选择不同模版来为当前笔记创建同名 base 文件,并放到指定的路径下,之后在当前的笔记里插入该 base 的链接。
如何使用
把后面提到的 base 模版及 Template 脚本拷贝一份到你的笔记库,适当配置一下就能使用了。
base 模版
提供一个 模版.base 模版示例:
filters:
and:
- type.contains(link("Resources"))
views:
- type: table
name: Resources
filters:
and:
- categories.containsAny("?")
order:
- file.name
- created
- categories
- tags
sort:
- property: created
direction: DESC
columnSize:
file.name: 307
note.created: 161
模版.base 里的 "?" 在调用脚本后会替换成当前笔记的链接。
Template 脚本
直接把以下 Template 脚本保存到你的模版文件夹路径(Template folder location)下,并记得把代码里的路径或名称修改成你自己的:
templateName:你的 base 模版的名称。
targetPath:base 笔记的默的存放位置。
<%*
// 创建 Base 文件的脚本
async function createBaseFileFromTemplate() {
// 获取当前活动笔记
const activeFile = app.workspace.getActiveFile();
if (!activeFile) {
new Notice("❌ 请先打开一个笔记");
return;
}
// 读取当前笔记内容
const content = await app.vault.read(activeFile);
const frontmatter = app.metadataCache.getFileCache(activeFile)?.frontmatter;
if (!frontmatter?.type) {
new Notice("❌ 当前笔记没有定义 type 属性");
return;
}
const noteTitle = activeFile.basename;
let templateName, targetPath, baseType;
// 根据 type 属性确定模板和路径
if (frontmatter.type.includes("[[Knowledge]]")) {
templateName = "Knowledge 模版.base";
targetPath = "80-Functions/Bases/Categories Bases/knowledge/";
baseType = "knowledge";
} else if (frontmatter.type.includes("[[Resources]]")) {
templateName = "Resources 模版.base";
targetPath = "80-Functions/Bases/Categories Bases/resources/";
baseType = "resources";
} else {
new Notice("❌ 不支持的笔记类型: " + frontmatter.type);
return;
}
try {
// 读取模板文件
const templateFile = app.vault.getFiles().find(file =>
file.name === templateName
);
if (!templateFile) {
new Notice(`❌ 找不到模板文件: ${templateName}`);
return;
}
const templateContent = await app.vault.read(templateFile);
// 替换模板中的 "?" 为笔记链接
const baseContent = templateContent.replace(/\?/g, `[[${noteTitle}]]`);
// 创建 base 文件名和路径
const baseFileName = `${noteTitle}.base`;
const fullPath = targetPath + baseFileName;
// 修复:检查目标路径是否存在(移除尾随斜杠)
const targetDir = targetPath.replace(/\/$/, ''); // 移除尾随斜杠
const targetFolder = app.vault.getAbstractFileByPath(targetDir);
if (!targetFolder) {
await app.vault.createFolder(targetDir);
}
// 创建 base 文件
await app.vault.create(fullPath, baseContent);
// 在当前笔记中插入 base 文件链接
const baseLink = `![[${baseFileName}]]`;
const newContent = content + `${baseLink}`;
await app.vault.modify(activeFile, newContent);
new Notice(`✅ 成功创建 ${baseType} base 文件: ${baseFileName}`);
} catch (error) {
new Notice(`❌ 创建 base 文件失败: ${error.message}`);
console.error(error);
}
}
// 执行脚本
createBaseFileFromTemplate();
%>
配置好之后,通过左方工具栏的 Templater button,或者 Ctrl + P 输入 Templater:Open insert template modal 命令来调用该脚本,就能在为当前文件生成 base,并插入到当前笔记了。
注意:如果你的笔记的 yaml 没有 type 属性,那么无法生成 base,在我的 sample 里 type 是 [[Knowledge]] 或 [[Resources]] ,是个链接。你可以去掉这部分代码或者改成你自己喜欢的属性。