如何在Org模式下缠绕指定子树中的所有源代码块?
只Tangle Org模式指定子树下的所有源代码块
要将Org文件中foobar子树下的两个源代码块tangle到属性指定的foobar.el,但现有方式都不满足需求:
C-u org-babel-tangle仅处理光标所在的单个源代码块,不在块内会报错;org-babel-tangle会处理文件中所有代码块,导致无关文件(如qux.el)被覆盖;- 合并代码块仅适用于简单场景,通用场景下会引发问题(比如sh脚本中shebang被变量声明前置)。
示例Org文件:
* foobar :PROPERTIES: :header-args: :tangle ../el/foobar.el :END: #+begin_src emacs-lisp (message "foo") #+end_src #+begin_src emacs-lisp (message "bar") #+end_src * qux :PROPERTIES: :header-args: :tangle ../el/qux.el :END: #+begin_src emacs-lisp (message "qux") #+end_src
解决方案
直接使用org-babel-tangle-subtree命令,操作步骤:
- 将光标定位到目标子树的顶层标题行(比如示例中的
* foobar行); - 执行
M-x org-babel-tangle-subtree。
该命令会仅处理当前子树下的所有源代码块,严格遵循子树属性中的:tangle路径输出,不会影响其他子树关联的文件。针对你提到的sh脚本场景,带shebang的代码块和使用:var变量的代码块会保持原有顺序tangle,不会出现变量声明前置的不合理情况。
内容的提问来源于stack exchange,提问作者Erwann
相关产品推荐
相关产品推荐

