繁体   English   中英

在 Org 模式下如何调用代码块来评估其他 org 文件?

[英]In Org-mode how to call code block to evaluate from other org file?

OrgMode版本 9+ 感兴趣

有没有办法从其他组织文件中引用和评估代码块,并在当前组织文件中的主代码块中使用它的结果?

或者可能只是将其他组织文件中的代码块包含到当前代码块中以将最后一个作为

#+BEGIN_SRS lang :noweb yes
<<reusable-part1>>
<<current-buffer-specific-part>>
<<reusable-part2>>
#+END_SRS

并且可以抄送它。

我认为Babel 库是跨组织模式文件重用代码的最佳方式。

对于任何用户向库中添加代码,首先将代码保存在一个 Org 文件的常规 'src' 代码块中,然后使用 org-babel-lob-ingest 加载 Org 文件,该文件绑定到 Cc Cv i

更明确地说,假设您有一个像这样的简单代码:

#+NAME: simpleShExample
#+BEGIN_SRC sh :var x="default X" :var y="default Y" :export none
  echo "Var: $x, $y"
#+END_SRC

此代码可以重复使用:

#+CALL: simpleShExample(y="My y")

打印:

Var: default X, My y

现在,如果您将代码保存在组织文件中,例如simpleShExample.org那么您可以通过使用以下 lisp 命令加载它来在任何其他组织文件中重用它:

(org-babel-lob-ingest "path/to/simpleShExample.org")

请注意,您可以在 emacs init 文件中执行一次。

您可以通过检查 org-babel-library-of-babel 变量来检查您摄取的所有源代码块的列表。

以下对我one.org :将其放在文件one.org

#+name: the-content
#+begin_src emacs-lisp
(print "hello")
#+end_src

#+name: the-wrapper
#+begin_src org :noweb yes
<<the-content>>
#+end_src

这在文件two.org

#+begin_src emacs-lisp :noweb yes
<<one.org:the-wrapper()>>
#+end_src

执行此块响应"hello" Cc Cv Cv 确认来自the-content的源在源块中结束。

该解决方案利用了

  • noweb 块可以调用 src-blocks
  • org-babel 调用可以从其他文件调用
  • org src-blocks 用它们的内容响应调用

因此org src-blocks 可以通过文件转发。 我使用了一个 wrap-org-block ( the-wrapper ),我在原始 src-block ( the-content ) 中有我感兴趣的实际语言。

当原始 src-block 的元素被解释为 wrapper-block 中的 org-code 时,此解决方案可能会引起麻烦!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM