(defun my/org-export-topmost-parent-at-point ()
"将光标所在标题的最上层祖先(及其所有子内容)导出为独立 .org 文件,并删除原文内容。"
(interactive)
(unless (org-at-heading-p)
(user-error "请将光标放在一个 Org 标题上"))
(save-excursion
;; 跳转到最顶层的祖先标题
(while (org-up-heading-safe))
(let* ((element (org-element-at-point))
(title (org-element-property :raw-value element))
(begin (org-element-property :begin element))
(end (org-element-property :end element))
(file-name (concat (my/org-sanitize-filename title) ".org"))
(content (buffer-substring-no-properties begin end)))
;; 写入新文件
(with-temp-buffer
(insert content)
(write-file file-name))
;; 删除原内容
(delete-region begin end)
(message "导出完成:%s" file-name))))
(defun my/org-sanitize-filename (title)
"将标题转换为合法文件名。"
(let ((cleaned (downcase title)))
(setq cleaned (replace-regexp-in-string "[^[:alnum:][:space:]-]" "" cleaned))
(setq cleaned (replace-regexp-in-string "[[:space:]]+" "-" cleaned))
cleaned))
3 个赞
footnote 如何迁移?
不知道。我没考虑这个情形
那你的方案约等于 refile 或者手动 kill yank
对,把 5-6 步,压缩成一步完成。