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

How do I prevent org-mode from executing all of the babel source blocks?

我有一个 org 文件,里面有很多 babel 源代码块,只需要在代码更改时重新执行。

如何防止 org 在导出期间执行所有块?也就是说,全部设置为只能手动执行?

我更喜欢一个单一的全局选项,而不是必须单独编辑每个块。

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

变量 org-export-babel-evaluate,如果设置为 nil,将阻止在导出过程中评估任何代码。这样只会导出手动插入的结果。

您可以通过将以下注释行放在组织文件的顶部来将它和其他人定义为 file variable

# -*- org-export-babel-evaluate: nil -*-

放置以下内容后:

# -*- org-export-use-babel: nil;-*-

在文件的顶部,并执行 C-c C-c,它对我不起作用。变量的值未相应设置。

但以下内容:

#+BIND: org-export-use-babel nil

应用 C-c C-c 按预期工作。

我在这里找到了答案:http://joelmccracken.github.io/entries/org-mode-specifying-document-variables-and-keywords/

我正在使用的 emacs 26 可能有一些变化。

将变量 org-export-babel-evaluate 设置为 nil 将避免代码评估,但它也会导致所有源代码块 header 参数被忽略这意味着带有参数 :exports none 的代码块或 :exports results 将最终出现在导出中。这让我措手不及。

另一种方法是在文件基础上使用 header 参数 :eval never-export,然后在 re-running 源代码时删除该行:

#+PROPERTY: header-args :eval never-export

查看 org-babel-evaluate 的文档字符串:

Switch controlling code evaluation and header processing during export. When set to nil no code will be evaluated as part of the export process and no header arguments will be obeyed. Users who wish to avoid evaluating code on export should use the header argument ‘:eval never-export’.