如何防止org-mode执行所有的babel源代码块?

20

我有一个org文件,其中包含许多babel源代码块,只有在更改代码时才需要重新执行。

我该如何防止org在导出期间执行所有块?换句话说,将它们全部设置为手动执行?

我希望有一个单一的全局选项,而不是必须逐个编辑每个块。

4个回答

25
变量org-export-babel-evaluate,如果设置为nil,将阻止任何代码在导出过程中进行评估。这样,只有通过手动执行插入的结果才会被导出。
您可以将它和其他变量定义为文件变量,方法是在您的org文件顶部放置以下注释行: # -*- org-export-babel-evaluate: nil -*-

2
org-export-babel-evaluate已经弃用,请使用org-export-use-babel。 - moritzschaefer
我很久以前就设置了这个选项,但让我困扰的是我的源代码块的导出标题被忽略了。原来全局的 Babel 导出控制是通过忽略所有这些选项来实现的。现在我建议改为使用(add-to-list 'org-babel-default-header-args '(:eval . "never-export"))。详细信息请参见其他答案。 - ed9w2in6

14
将变量org-export-babel-evaluate设置为nil将避免代码评估,但也会导致所有源代码块的头部参数被忽略。这意味着带有参数:exports none:exports results的代码块将出现在导出中。这让我感到措手不及。
另一种选择是在文件基础上使用头部参数:eval no-export,然后在重新运行源代码时删除该行。
#+PROPERTY: HEADER-ARGS+ :eval no-export

请参阅org-babel-evaluate的文档字符串:
控制导出过程中代码评估和头部处理的开关。 当设置为nil时,导出过程中不会评估任何代码,并且不会遵守任何头部参数。希望在导出时避免评估代码的用户应该使用头部参数“:eval never-export”。

1
这可以进行全局配置:(add-to-list 'org-babel-default-header-args '(:eval . "never-export")) - donaldh

9
您可以将cache设置为yes(请参见http://orgmode.org/manual/cache.html)。这也可以在文件中设置属性行以全局操作。 #+Property: header-args :cache yes只需确保在该行上按C-c C-c以激活属性。

这很有用,但如果我想完全阻止所有自动评估怎么办? - shader
不确定我是否理解。假设所有代码至少已执行一次,那么设置该属性将全局防止所有重新执行。您可以在手册中找到它,但我认为缓冲区的通用版本的“官方”行是:#+PROPERTY: header-args :cache yes - brittAnderson
@brittAnderson,至少在我的情况下发生的是,即使启用了缓存,当您使用C-c C-e导出时,它也会要求评估org文件中的所有代码块。 - elviejo79
你在添加该属性后,是否通过在标题中执行C-c C-c来刷新标题? - brittAnderson

5

4
Emacs 26.1 中 org-export-use-babel 的文档中说:“希望在导出时避免评估代码的用户应该使用头部参数': eval never-export'。” - Ynjxsjmh
要使此更改生效,请使用M-x revert-buffer重新访问文件,参见https://dev59.com/Z2Ij5IYBdhLWcg3wpmoH#5LqkEYcBWogLw_1bozAa。 - serv-inc

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