三股水
绝妙!Obsidian文件、模板全自动方案

经常和个人博客圈的朋友聊到"折腾力"这个话题,几位友人都夸我还能折腾。其实到了这个年纪,已经不太愿意主动改变——思维容易固化,行动力也跟不上了,即使有想法改经常都会受莫名其妙的力量影响。

为了对抗这种状态,我强迫自己去改变,主动学习、研究、突破,慢慢养成习惯,最好是形成肌肉记忆式的惯性改变。这几天我立下了一个目标:从零开始认真研究 Obsidian,把这个生产力工具的潜力彻底释放出来。

于是就有了今天这篇文章,关于日常记录文件系统和模板的效率方案。

现状

目前 Obsidian 已经深度使用了一年左右,深度到什么程度呢?电脑几乎随时开着,每天至少产生七八个新文件。我有多个仓库,其中雷打不动记录的是"时间记录仓库"——记录每天做了什么、完成进度如何,包含客观数据、主观分析总结,还涉及工作、育儿、阅读等多个方面,细致到买菜、吃饭,甚至洗澡洗头都有记录。

现在的操作方式是,提前建好两个分类 + 日期.MD 文件。比如今天是 18 号,但我的文件已经建到 20 号了,每天我都会新建一个,起到提前规划和模板的作用,新建时以右键复制副本的方式操作,再改一下日期。

这操作其实已经蛮简单高效了。

但今天突然想到,是否可以更高效、更好玩呢?答案是可以的,这就是今天的折腾了。

折腾

之前了解过 Templater 插件,但因为是全英文的以及不折腾的落后思想,几次尝试都浅尝辄止,始终没能正常用上。最近我发现一个好玩法:既然插件是全英文的,自己研究太耗时,索性丢给 AI,让它帮我总结核心玩法,相当省事靠谱,还不会出错。

这个插件超级强大,两个核心特色:一是自动化加载模板,二是模板相当于扩展库,可以在里面写代码,让内容更丰富好玩。

经过尝试对比,我决定为我每天都要记录的五个文件夹绑定五个模板。这样只要我在这些文件夹里新建笔记,就会自动带上模板内容,每天我只需要填数据、新增补充项即可。

内容模板有了,但我还希望文件名也能像之前一样规范。新建后手动改名效率不如我之前的副本方式——创建副本时直接弹窗改名即可,现在反而要多一步右键操作。

当然,强大的 Templater 插件有解决办法,它支持强大的代码功能,可以自定义自动改名。比如我的 CR 模块文件名使用了这段代码:

await tp.file.rename("CR:" + tp.date.now("YYYY.MM.DD-HHmmss"));

新建完笔记后,文件名会瞬间按这个规则自动重命名,完全自动。还可以在文件开头显示文件名,比如我用的是这段代码:

# CR-<% 当前时间 %>

结果是:# CR-2026-06-18 20:04:40

看起来很完美对吧?从右键副本到全自动新建,到这里效率其实差不多——一个需要右键改名,一个是全自动新建,仅仅稍稍高效了一些,基本可以忽略不计。

但关键点在这里:上面的内容已经展示了模板代码的强大之处。原来的副本很简单,而模板能让内容活起来、丰富起来。有了上面的改名功能后,又让AI帮我总结这个插件支持哪些类型的扩展和代码。

第一时间想到的就是自动显示天气和预报天气,刚好我有高德的 API。AI 出代码,我出 API,轻松搞定。但 Obsidian 内基于 IP 定位的数据获取还是有些困难,详细精准的数据要么获取不到,要么直接报错。

经过这番折腾,我的笔记内容已经能显示天气相关数据了,而且是全自动获取的。这里附上我使用的代码,仅需填上自己的 API Key 即可使用:

    <%*
// 文件名格式:CR:日期时分秒.md
await tp.file.rename("CR:" + tp.date.now("YYYY.MM.DD-HHmmss"));

// ⚠️ 重要:把下面的 "你的高德API Key" 替换成你申请的 Key
let amapKey = "你的API";

// 通过高德 IP 定位 API 获取所在城市的 adcode
let ipUrl = `https://restapi.amap.com/v3/ip?key=${amapKey}`;
let ipResponse = await fetch(ipUrl);
let ipData = await ipResponse.json();
let adcode = ipData.adcode;

// 拼接高德天气 API 地址
let weatherUrl = `https://restapi.amap.com/v3/weather/weatherInfo?key=${amapKey}&city=${adcode}&extensions=all`;

let 位置 = "";
let 天气 = "";
let 温度 = "";
let 明日天气 = "";
let 明日温度 = "";

// 获取天气信息并解析
await fetch(weatherUrl)
  .then(res => res.json())
  .then(data => {
    let info = data.forecasts[0];
    位置 = info.province + '-' + info.city;
    天气 = info.casts[0].dayweather + ' / ' + info.casts[0].nightweather;
    温度 = info.casts[0].daytemp + '℃' + ' / ' + info.casts[0].nighttemp + '℃';
    
    // 明日天气(casts[1] 是第二天)
    if (info.casts.length > 1) {
        let 明日 = info.casts[1];
        明日天气 = 明日.dayweather + ' / ' + 明日.nightweather;
        明日温度 = 明日.daytemp + '℃' + ' / ' + 明日.nighttemp + '℃';
    }
  });

// 当前时间
let 当前时间 = tp.date.now("YYYY-MM-DD HH:mm:ss");
let 创建日期 = tp.file.creation_date("YYYY MM DD dddd");
let 创建时间 = tp.file.creation_date("HH:mm:ss");
-%>
# CR-<% 当前时间 %>
**日期** :: <% 创建日期 %>  
**时间** :: <% 创建时间 %>  
**位置** :: <% 位置 %>  
**天气** :: <% 天气 %>  
**温度** :: <% 温度 %>

## 明日天气
**天气** :: <% 明日天气 %>  | **温度** :: <% 明日温度 %>

到这里应该结束了吧?但我有些强迫症,按要求新建了模板文件夹保存模板,Obsidian 默认把这个文件夹显示在左侧文件夹列表里,这我不能接受。于是又去找 AI,它让我用最传统的方法——在文件名前面加个点 .,结果文件是隐藏了,插件设置也正常了,但新建笔记时提示找不到模板文件了。

来回折腾几次,看来是不支持这样改。

再次问 AI 有没有类似的隐藏文件插件,果然真有,名字叫 Explorer Hider,右键文件夹即可隐藏,左侧菜单栏还能一键显示已隐藏文件。

到此,今天的折腾结束,花了 70 分钟。

😊
提交

评论区

共 2 条评论

  1. 头像
    水拍石 Lv1
    折腾到后来,很多功能都是量身定制的,自己觉得很强大,但别人可能觉得没卵用,我最近折腾wp主题就这样。
    6月19日 陕西
    1. 头像
      XIGE 博主
      @水拍石 是这样的呢,但是无所谓了,自用为主,解决了自己的问题那就没有白折腾。
      6月19日 云南