Ở bài trước Tận dụng Obsidian làm editor chính, mình có nhắc đến "nỗi đau" khi phải gõ tay từng dòng Frontmatter cho mỗi bài viết mới.
Hôm nay mình sẽ chia sẻ chi tiết cách mình xử lý vấn đề này bằng plugin Templater.
🤔 Tại sao cần Templater?
Ban đầu mình nghĩ dùng tính năng Templates có sẵn (Core Plugin) của Obsidian là đủ. Nhưng nó quá đơn giản, chỉ chèn được ngày giờ và một vài thông tin cơ bản.
Nhu cầu của mình thì phức tạp hơn:
- Hỏi tiêu đề ngay khi tạo: Không muốn phải click vào title để sửa.
- Slug tự động: Mình muốn nhập tiêu đề "Cách nấu phở" thì nó phải tự sinh ra slug
cach-nau-pho(bỏ dấu tiếng Việt, thay khoảng trắng...). - Tên file chuẩn: Tự động đổi tên file
Untitledthành20260116-cach-nau-pho.md.
Nên mình lựa chọn cài thêm plugin Templater (với khả năng chạy JavaScript) để có thể tự động hóa quy trình này.
🛠️ Các bước Setup
Bước 1: Cài đặt Plugin
Vào Settings → Community Plugins → Tắt "Restricted mode" → Tìm và cài Templater.
Bước 2: Chuẩn bị folder chứa template
Mình tạo một folder riêng để chứa các file mẫu, ví dụ: src/content/_templates.
Vào Settings → Templater, ở mục "Template folder location", trỏ đến folder vừa tạo.
Bước 3: Tạo file Script
Tạo một file mới trong folder template đó, đặt tên là blog-post.md. Copy đoạn code này vào:
<%*
// 1. Hỏi tiêu đề bài viết
let title = tp.file.title;
if (title.startsWith("Untitled") || title === "") {
title = await tp.system.prompt("Nhập tiêu đề bài viết");
}
// 2. Tạo slug từ tiêu đề (bỏ dấu, thường, gạch nối)
const slug = title
.toLowerCase()
.normalize("NFD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/đ/g, "d")
.replace(/Đ/g, "d")
.replace(/[^a-z0-9\s-]/g, "")
.trim()
.replace(/\s+/g, "-")
.replace(/-+/g, "-");
// 3. Lấy ngày hiện tại
const pubDate = tp.date.now("YYYY-MM-DD");
const dateString = tp.date.now("YYYYMMDD");
// 4. Đổi tên file theo format chuẩn
const newFileName = `${dateString}-${slug}`;
await tp.file.rename(newFileName);
-%>
---
title: "<% title %>"
slug: "<% slug %>"
pubDate: <% pubDate %>
description: ""
coverImage: ""
draft: true
tags: []
categories: []
projects: []
---
<% tp.file.cursor() %>
Cách script này hoạt động:
- Hỏi tiêu đề: Khi chạy, nó sẽ hiện một popup hỏi bạn "Bài này tên gì?".
- Xử lý Slug: Nó dùng JavaScript để biến "Tiếng Việt có dấu" thành "tieng-viet-khong-dau".
- Tự đổi tên file: File
Untitledsẽ tự biến thành20260116-tieng-viet-khong-dau.md. - Đặt trỏ chuột:
tp.file.cursor()sẽ đưa con trỏ chuột xuống dưới cùng, sẵn sàng để bạn viết.
🚀 Sử dụng
Quy trình viết bài mới của mình giờ chỉ còn 2 bước:
- Bấm
Cmd + Nđể tạo file mới từ template (phím tắt mình gán cho Templater). - Nhập tiêu đề và Enter.
Bùm! File được đổi tên, frontmatter được điền, và mình có thể bắt đầu viết ngay lập tức. Mọi thứ diễn ra trong chưa đầy 5 giây.
Bạn có thể áp dụng cách này cho Daily Note, Project Note, hay bất cứ loại nội dung nào có cấu trúc lặp đi lặp lại.
Bài tiếp theo: Sau khi tạo bài viết dễ dàng rồi, làm sao để mình có thể quản lý danh sách hàng chục bài viết?
→ Mời bạn xem tiếp Quản lý danh sách bài Blog với Obsidian Properties