如何编写可生成文件名与标题属性的Org-capture模板?
解决Org-capture博客模板无法生成目标文件的问题
问题原因
你的代码无法正常生成指定目录下的Org文件,核心问题有两点:
- 用
setq定义的title、date等变量作用域不对,Org-capture模板展开时无法正确读取这些值,导致内容输出到启动缓冲区而非目标文件。 - 缺少捕获完成后的自动处理配置,没有触发文件保存和跳转逻辑。
修正后的代码
(defun org-new-blog-post () (let* ((date (format-time-string (org-time-stamp-format :long :inactive) (org-current-time))) (title (read-string "Post Title: ")) (fname (org-hugo-slug title)) (description (read-string "Description: ")) (file-path (expand-file-name (format "%s.org" fname) "~/git/personal/blog/org/blog/"))) ;; 将变量存入捕获上下文供模板调用 (plist-put org-capture-plist :title title) (plist-put org-capture-plist :date date) (plist-put org-capture-plist :description description) file-path)) (setq org-capture-templates '(("n" "new post" plain (function org-new-blog-post) "#+title: %:title\n#+date: %:date\n#+description: %:description\n\n" :immediate-finish t)))
关键改动说明
- 用
let*定义局部变量,避免污染全局环境,同时保证变量按顺序赋值。 - 通过
org-capture-plist传递变量,模板中用%:title这类上下文变量引用,确保参数能正确传递到模板内容里。 - 添加
:immediate-finish t配置,捕获完成后自动保存文件并关闭临时缓冲区,直接跳转到新生成的博客文件。
内容的提问来源于stack exchange,提问作者peregrinator
相关产品推荐
相关产品推荐

