在 Emacs 组织模式中,是否有类似的命令new-file-from-subtree?
正如我所设想的那样,此命令将从当前文件中剪切子树,将子树粘贴到新缓冲区中,然后使用子树的名称保存新缓冲区。
我不相信目前存在这样的命令。但是,以下内容可以解决问题:
(require 'org-element)
(defun zin/org-file-from-subtree (&optional name)
"Cut the subtree currently being edited and create a new file
from it.
If called with the universal argument, prompt for new filename,
otherwise use the subtree title."
(interactive "P")
(org-back-to-heading)
(let ((filename (cond
(current-prefix-arg
(expand-file-name
(read-file-name "New file name: ")))
(t
(concat
(expand-file-name
(org-element-property :title
(org-element-at-point))
default-directory)
".org")))))
(org-cut-subtree)
(find-file-noselect filename)
(with-temp-file filename
(org-mode)
(yank))))
Run Code Online (Sandbox Code Playgroud)
照原样,它不会将当前航向提升到级别 1,而是会保留现有深度。(推广也应该是可行的,但需要更复杂的代码)。它还提供了提示输入新文件名的选项,使用C-u.