如何从org-mode缓冲区的折叠状态中仅复制可见文本?

18

如果源是org文件,如何将其复制到其他缓冲区?

** TODO task #1
   - some text for task #1
** TODO task #2 
   - some text for task #2

但是当你折叠所有任务时,它会看起来像:

** TODO task #1 ...
** TODO task #2 ...

我想标记所有任务并将其复制到另一个缓冲区中,它必须看起来像第二种变体。不要包括存储在每个任务内部的任务文本。 我该怎么做?


我认为展示一个实际的例子,展示变化前后的状态会更有帮助。根据你目前的描述,我并不完全确定你想要实现什么。请确保使用 Stack Overflow 的“markdown”语法来格式化示例文本,否则你将会遇到行与行之间重叠的问题(就像上面发生的情况一样)。 - phils
1
我认为这个问题是“如何从org-mode缓冲区的折叠状态中仅复制可见文本?” - Dave Bacher
org-mode 源自 outline-mode,因此似乎 outline-headers-as-kill 应该是相关的,但实际上并不起作用。虽然值得一提,但也许有一个相对简单的解决方法? - phils
3个回答

25
根据 Hendy 的评论,在当前版本的 org-mode 中,您可以使用 org-copy-visible (C-c C-x v) 将当前区域可见内容复制到 kill-ring。(通常可以首先使用C-x h标记整个缓冲区。)
此外,请注意导出分派菜单(C-x C-e)提供了“仅可见内容”开关,如果您想将该内容导出为不同格式。
对于旧版 org-mode,原始答案仍然适用:

M-x org-export-visible RET SPC 会将您的 org-mode 缓冲区中仅当前可见的文本复制到一个新缓冲区中。

org-export-visible 是 `org-exp.el' 中一个交互式编译过的 Lisp 函数。

(org-export-visible TYPE ARG)

创建当前缓冲区可见部分的副本,并导出它。该副本创建在一个临时缓冲区中,使用后将被删除。 类型是最终键(作为字符串),也可以选择`C-c C-e' 导出调度程序中的导出命令。 特殊情况是,如果您在提示符处键入 SPC,则不会删除临时 org-mode 文件,而是呈现给您以便继续使用它。前缀参数 ARG 传递到导出命令。

如果您想要将其绑定到(例如)C-c o,您可以使用以下内容:
(add-hook 'org-mode-hook 'my-org-mode-hook)
(defun my-org-mode-hook ()
  "Custom behaviours when entering org-mode."
  (local-set-key (kbd "C-c o") (function (lambda () (interactive)
                                           (org-export-visible ?\s nil)))))

6
FYI:根据orgmode手册,现在可以使用C-c C-x v来完成此操作。 - Hendy
1
这个答案很棒,可惜我两年前已经点赞了,因为我今天还想再点一次赞。 - Nikana Reklawyks
1
谢谢@NikanaReklawyks :) 我以前也遇到过同样的情况。甚至有一次,我无法给解决我的问题的答案点赞,因为它是由我自己写的 :) - phils
1
这非常有用,谢谢!对于未来的谷歌搜索:这也适用于“折叠”链接(“描述性链接”)。因此,如果您想复制链接而不包括[[...]]内容,只需标题,您可以将链接设置为“描述性”,选择并复制。在共享包含链接的org文本时非常有用。 - hraban

11

有一个名为org-copy-visible的东西,它应该完全符合你的需求。


很好,正是我所需要的。 - Leo Ufimtsev

-1

尝试使用M-x org-todo-list(或C-c a t)。这将在* Org Agenda *缓冲区中显示一个TODO条目列表(在议程文件列表中列出的文件中)。

您可能需要将当前文件添加到议程文件列表中。从org-agenda文档中可以了解到:

如果当前缓冲区处于Org模式并访问文件,则还可以首先按'<'一次,以指示议程应该暂时(直到下一次使用C-c a)限制为当前文件。按两次'<'表示限制为当前子树或区域(如果活动)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接