模板語法

LifeOS 現在有兩套模板語法,需要按你使用的版本區分:

  • LifeOS Pro / Aino LifeOS:使用內建模板語法,例如 {{snapshot:Project}}、{{date}}、{{tags}}。這套語法不依賴 Templater。
  • 社群版 / 開源版 LifeOS:只支援舊的 Templater 語法,例如 <% LifeOS.Project.snapshot() %>。如果你使用開源版本,不要把模板替換成新語法。

基礎變數

這些變數可以放在週期筆記模板和主題筆記模板裡:

變數說明
{{date}}當前筆記日期,格式為 YYYY-MM-DD
{{date:FORMAT}}使用 Day.js 格式化當前筆記日期,例如 {{date:YYYY-MM-DD dddd}}
{{date+N:FORMAT}} / {{date-N:FORMAT}}當前筆記日期前後偏移 N 天
{{monday:FORMAT}} ... {{sunday:FORMAT}}當前周內指定星期的日期,適合在週記裡引用每天的日記
{{time}}當前時間,格式為 HH:mm
{{time:FORMAT}}使用 Day.js 格式化當前時間
{{title}} / {{filename}}新建筆記的檔名,不含 .md
{{year}} / {{month}} / {{day}}年、月、日
{{week}} / {{weekYear}}周序號、周所屬年份
{{quarter}}季度,例如 Q1
{{periodType}}週期型別:Daily、Weekly、Monthly、Quarterly、Yearly
{{tags}}建立主題筆記時傳入的主題標籤,不含開頭的 #

周內日期變數

在週記模板裡,可以用 {{monday:FORMAT}} 到 {{sunday:FORMAT}} 引用當前周的每一天。中文環境預設按週一到週日計算;如果你在設定中修改了周起始日,會按設定計算。

例如,日記檔名是 YYYY-MM-DD 時:

![[{{monday:YYYY-MM-DD}}]]
![[{{tuesday:YYYY-MM-DD}}]]
![[{{wednesday:YYYY-MM-DD}}]]
![[{{thursday:YYYY-MM-DD}}]]
![[{{friday:YYYY-MM-DD}}]]
![[{{saturday:YYYY-MM-DD}}]]
![[{{sunday:YYYY-MM-DD}}]]

如果你的日記檔名是 YYYYMMDD dddd,也可以寫成:

![[{{sunday:YYYYMMDD dddd}}]]

快照變數

LifeOS Pro 的快照變數寫法是:

{{snapshot:Project}}
{{snapshot:Area}}
{{snapshot:Resource}}
{{snapshot:Archive}}
{{snapshot:Theme}}

它會生成對應資料夾下主題索引檔案的編號列表。例如 {{snapshot:Project}} 會掃描專案資料夾,找到每個專案資料夾裡的索引檔案,然後生成:

1. [[1. 專案/專案 A/README|專案 A]]
2. [[1. 專案/專案 B/README|專案 B]]

如果你使用的是 *.README.md 索引模式,LifeOS Pro 會按當前設定尋找索引檔案。

條件塊

可以按工作日 / 週末切換模板內容:

{{if weekday}}

## 工作日計劃

- [ ] 處理今日重點任務
      {{else}}

## 週末回顧

- [ ] 做一次輕量復盤
      {{endif}}

weekday 指週一到週五。週六、週日會使用 {{else}} 後的內容;沒有 {{else}} 時,週末會輸出空內容。

週期筆記示例

## 專案列表

{{snapshot:Project}}

## 日常記錄

%%你的記錄%%

## 明日提醒

{{date+1:YYYY-MM-DD}}

主題筆記示例

建立主題筆記時,{{tags}} 會被替換成當前主題標籤。寫成正文標籤時,通常要自己加上 #:

---
tags:
  - { { tags } }
---

## 任務

- [ ] #{{tags}} 截止日期 📅 {{date+7:YYYY-MM-DD}}

```LifeOS
TaskListByTag
```

社群版 / 開源版相容語法

社群版 / 開源版 LifeOS 依賴 Templater,只支援舊寫法:

<% LifeOS.Project.snapshot() %>
<% LifeOS.Area.snapshot() %>
<% LifeOS.Resource.snapshot() %>
<% LifeOS.Archive.snapshot() %>

主題標籤仍使用 Templater 的 frontmatter 變數:

#<% tp.frontmatter.tags %>

如果你維護的是開源版倉庫或舊版示例庫,請繼續使用這套舊語法,並確保 Templater 已啟用 Trigger Templater on new file creation。

遷移安全規則

當你使用"檢查並安全遷移"功能將舊模板轉換為新語法時,請注意:

  • 自動遷移只會更新無殘留指令碼的模板。如果你的模板中只包含 tp.date.now、tp.frontmatter.tags、tp.file.title、snapshot() 等已識別的舊語法片段,遷移會自動完成。
  • 含自定義 JavaScript 指令碼的模板不會被自動修改。模板中如果包含 <%* let ... %>、<% if ... %>、tp.user.* 等自定義 Templater 指令碼,系統不會自動寫入,避免破壞你的自定義邏輯。
  • 可以在設定頁隨時重新檢查。開啟設定 → 週期筆記或主題筆記頁,點選"!"按鈕並選擇"檢查並安全遷移",即可重新掃描模板的最新狀態。
  • 模板原始檔會保留條件指令。在 Templates/Daily.md 中看到 {{if weekday}}、{{else}}、{{endif}} 是正常的;生成後的日期日記裡只應保留命中的正文分支,不應再顯示這些指令。
  • 手動改寫建議:只有在確認舊 .weekday() 指令碼確實表示“週一到週五”時,才改成 {{if weekday}}...{{else}}...{{endif}};Moment 的 .weekday() 會受 locale 的周起始日影響,外掛不會猜測轉換。如果模板依賴其他 Templater 外掛或複雜指令碼,建議繼續保留 Templater,或手動改寫後再遷移。