如何在emacs org-mode中将子标题移动到其他标题下

时间:2012-03-21 20:16:50

标签: emacs org-mode

我的列表如下所示:

* TODAY
** TODO Item 1
** TODO Item 2
* TOMORROW
** TODO Item 3
** TODO Item 4 

...作为单个列表,基于一些建议我received here。 我想将TODO第2项从今日下移到明天下。

手册says

M-up
M-down
Move the item including subitems up/down (swap with previous/next item of same indentation). If the list is ordered, renumbering is automatic. 

但是当我可以改变第1项和第2项的位置时,我无法将第2项移到今日标题之外---我无法在明天下移动到第3项之前。缓冲区告诉我:

cannot move past superior level or buffer limit org mode

什么是击键让我将子项“超越上级”移到新标题下?

6 个答案:

答案 0 :(得分:16)

您可以使用 C-c C-w org-refile)并指定您要发送TODO项目的标题。

正如您将在此函数的文档中看到的那样( Ch f org-refile),您可以自定义org-refile-targetsorg-reverse-note-order变量以确定列表可能的目标标题以及目标标题内移动项目的位置。

答案 1 :(得分:9)

以下是两个选项:

  1. 使用M-left将项目2提升到顶层,然后使用M-down将其移至“明天”下方,最后使用M-right在“明天”下将其降级。

  2. 使用org-cut-specialC-c C-x C-w)剪切“第2项”子树,然后使用org-paste-specialC-c C-x C-y)将其粘贴到“TOMORROW”下。

答案 2 :(得分:2)

在制作投影仪演示时,我必须做很多事情。对我来说最简单的方法就是在你的示例列表中折叠然后将项目折叠起来,然后基本上杀死并拉动该区域。也就是说,转到** TODO Item 2行的开头,设置标记(C-[SPACE]),将点移动到下一行的开头(C-n),杀死该区域({ {1}}),将点移动到C-w标题下的所需位置,然后将其拉回(* Tomorrow)。获取区域而不仅仅是行(C-y)非常重要,这样才能获得折叠的所有位。

答案 3 :(得分:1)

与上面的sanityinc类似,我采用的解决方案是......

  1. 将光标移至* TOMORROW
  2. 使用M-right
  3. 将其降级为**
  4. 将光标向上移动到TODO项目2
  5. 将M-down
  6. 下拉到** TOMORROW下方
  7. 将光标返回** TOMORROW并使用M-left
  8. 重新提升

    为此构建一个宏可能会更好,但它很直观,而不是看起来那么糟糕。尽管如此,如果C-M-down或其他事情做到这一点会更方便。

答案 4 :(得分:1)

派对迟到了,但为了扩展Mittenchops答案,我创建了以下宏。

(defun org-move-subtree-to-next-superior()
  "Moving subtree to next superior."
  (interactive) 
  (org-promote-subtree)
  (org-move-subtree-down)
  (org-demote-subtree))
(global-set-key (kbd "C-c C-x t") 'org-move-subtree-to-next-superior)

答案 5 :(得分:0)

最简单的方法,只需使用M上移或M上移,您就可以将项目移至更高级别。