如何在emacs组织模式下将子标题移动到其他标题下

如何在emacs组织模式下将子标题移动到其他标题下,emacs,org-mode,Emacs,Org Mode,我的列表如下所示: * TODAY ** TODO Item 1 ** TODO Item 2 * TOMORROW ** TODO Item 3 ** TODO Item 4 …作为一个单一的列表,基于我的一些建议。 我想把第二项的待办事项从今天移到明天 手册: 但是,虽然我可以更改项目1和项目2的位置,但我不能将项目2移到“今天”标题之外——我不能将其移到“明天”标题下的项目3之前。缓冲区告诉我: 无法移动超过上级或缓冲区限制组织模式 什么样的按键可以让我将子项“上一级”移动到新标题下?

我的列表如下所示:

* TODAY
** TODO Item 1
** TODO Item 2
* TOMORROW
** TODO Item 3
** TODO Item 4 
…作为一个单一的列表,基于我的一些建议。 我想把第二项的待办事项从今天移到明天

手册:

但是,虽然我可以更改项目1和项目2的位置,但我不能将项目2移到“今天”标题之外——我不能将其移到“明天”标题下的项目3之前。缓冲区告诉我:

无法移动超过上级或缓冲区限制组织模式

什么样的按键可以让我将子项“上一级”移动到新标题下?

您可以使用C-C C-w(
org refile
)并指定要将待办事项发送到的标题

正如您将在该函数的文档(C-h f
org refile
)中看到的,您可以自定义
org refile targets
org reverse note order
变量,以确定可能的目标标题列表和移动项目在目标标题中的位置。

这里有两个选项:

  • 使用
    M-left
    将项目2提升到顶层,然后使用
    M-down
    将其向下移动到“明天”下方,最后使用
    M-right
    将其降级到“明天”下方

  • 使用
    org Cut special
    C-C-x C-w
    )剪切“Item 2”子树,然后使用
    org paste special
    C-C-x C-y
    )将其粘贴到“明天”下


  • 我在做beamer演示时经常这样做。对我来说,最简单的方法就是按照示例列表中的方法折叠物品,基本上杀死并拉扯该区域。也就是说,转到
    **TODO项2
    行的开头,设置标记(
    C-[SPACE]
    ),将该点移动到下一行的开头(
    C-n
    ),杀死该区域(
    C-w
    ),将该点移动到
    *明天
    标题下所需的位置,然后将其拉回(
    C-y
    )。获取区域而不仅仅是行(使用
    C-k
    )是很重要的,这样可以获得所有折叠的位。

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

  • 将光标移动到*明天
  • 使用M-右键将其降级为**
  • 将光标上移到TODO项目2
  • 用M-down将它拉到**下
  • 明天将光标返回**并使用M-left重新升级

  • 为此构造一个宏可能会更好,但它是直观的,并不像看上去那么糟糕。尽管如此,如果C-M-down或其他什么东西这样做会更方便。

    派对有点晚,但为了扩展Mittenchops答案,我创建了以下宏

    (defun org-move-subtree-to-next-superior()
    “将子树移动到下一个上级。”
    (互动)
    (组织提升子树)
    (组织向下移动子树)
    (组织降级子树)
    
    (全局设置键(kbd“C-C-x t”)'组织将子树移动到下一个上级)

    最简单的方法,只需使用M-shift-up或M-shift-down,您就可以将项目移动到上级级别。

    太棒了,谢谢@sanityinc。是的,我认为(1)是我做这件事最干净的方式。但我最终还是以另一种方式工作。我将标题“明天”降级为带有
    M-right
    的副标题,然后将其上移,
    M-up
    ,然后重新升级
    M-left
    。也许这需要提出另一个问题——我是emacs新手——但是有没有一种简单的方法可以将
    m-right m-up m-left
    绑定到一个宏,比如
    C-m-up
    ?你应该读一下键盘宏,它可以保存为函数并绑定到键以备将来使用。直接编写一个函数来实现您想要的功能也很简单,但这超出了这个问题或注释的范围。谢谢。它(还没有?)在中提到?也许这是一个新的功能?这对我不适用。
    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. 
    
    (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)