Files
notes/resource/工具/obsidian/Templater.md
T
2026-03-01 01:43:46 +08:00

3.9 KiB

闪念

<%*
// 查找当前日期对应的文件
const file = tp.file.find_tfile(tp.date.now("YYYY-MM-DD"));

if (!file) {
    // 如果没有找到对应的文件,弹出通知
    new Notice("No Daily Note Found!");
    return; // 早期返回,避免更深的嵌套
}

// 弹出提示框,获取用户输入的日记内容
const loggedItem = await tp.system.prompt("What's Up?");
if (loggedItem === undefined || loggedItem === null || loggedItem.trim().length === 0) {
    // 如果输入为undefined、null、空串或仅包含空格,不执行任何操作,弹出通知
    new Notice("Input is empty or invalid!");
    return; // 早期返回,避免更深的嵌套
}

// 获取当前时间
const time = tp.date.now("HH:mm");
// 读取文件内容,并按行分割成数组
const content = (await app.vault.read(file)).split("\n");
// 找到“# 杂记”标题的位置
const index = content.indexOf("# 杂记");

// 检查“# 杂记”标题下一行是否为空行
if (content[index + 1].trim() === "") {
    // 如果下一行是空行,就在空行下添加新内容
    content.splice(index + 2, 0, `- ${time} - ${loggedItem}`);
} else {
    // 如果下一行不是空行,就先添加一个空行,然后添加新内容
    content.splice(index + 1, 0, "", `- ${time} - ${loggedItem}`);
}

// 将修改后的内容写回文件
await app.vault.modify(file, content.join("\n"));
-%>

问题记录模板

<%*
// 弹出提示框获取文件标题
const title = await tp.system.prompt("Enter file title");

// !!!!!!!!!!!!!!!!每个人自定义区域!!!!!!!!!!!!!!!!
// 定义待创建文件的目录
const inboxDirectory = "000-Inbox";
// 定义文档中会用到的特定标题,方便将来修改
const detailHeader = "# 问题详情";
// !!!!!!!!!!!!!!!!每个人自定义区域!!!!!!!!!!!!!!!!

// 检查用户输入的标题是否有效(非空且非纯空格)
if (!title || title.trim().length === 0) {
    new Notice("Title is empty or invalid!");
    return; // 如果标题为空或无效,则显示通知并停止执行
}

// 获取当前日期并格式化为 YYYY-MM-DD 用于文件属性
const currentDate = tp.date.now("YYYY-MM-DD");
// 获取当前时间并格式化为 HH:mm 用于文件属性
const currentTime = tp.date.now("HH:mm");
// 获取当前日期并格式化为 MMDD 用于文件名前缀
const datePrefix = tp.date.now("MMDD");

// 构造待写入新文件中的内容,使用 YAML front matter 和 Markdown 格式
const content = `---
日期: ${currentDate} ${currentTime}
来源:
---

# 问题详情



# 处理过程



# 总结


`;

// 根据日期前缀和用户输入的标题构造文件名
const myFilename = `${datePrefix}-${title}`;

// 尝试创建新文件并写入构造好的内容
try {
    await tp.file.create_new(content, myFilename, false, app.vault.getAbstractFileByPath(inboxDirectory));
    new Notice("File created successfully!"); // 如果成功,弹出通知

    // 根据文件名和目录获取新创建的文件
    const createdFile = app.vault.getAbstractFileByPath(`${inboxDirectory}/${myFilename}.md`);
    // 获取新窗口叶节点
    const leaf = app.workspace.getLeaf(true);
    // 在新叶节点中打开新创建的文件
    await leaf.openFile(createdFile);

    // 等待新视图加载完成
    await leaf.view.awaitingView;

    // 获取编辑器实例
    const editor = leaf.view.sourceMode.cmEditor;
    // 寻找文件中的特定标题行
    const line_number = editor.lastLine();
    for(let i = 0; i <= line_number; i++) {
        const line = editor.getLine(i);
        if(line.includes(detailHeader)) { // 如果找到指定的标题行
            // 将光标移动到该标题下一行的开始位置
            editor.setCursor({line: i+2, ch: 0});
            break;
        }
    }
} catch (e) { // 如果尝试创建或打开文件出现错误
    new Notice("Failed to create or open file: " + e.message); // 弹出错误通知
}
-%>