如何org-babel-tangle只有一个代码块?

How to org-babel-tangle only one code block?

我在一个 .org 文件中生成多个文件,其中包含多个源代码块。例如:

#+begin_src rst :tangle file1.rst :noweb yes
<<file1>>
#+end_src

#+begin_src rst :tangle file2.rst :noweb yes
<<file2>>
#+end_src

有什么方法可以在不改变 header 选项的情况下只纠结一个特定的代码块吗?

我正在为 Sphinx 生成这些文件,为了减少编译时间,我只想整理当前正在处理的文件。

如果有这样的命令就好了 org-babel-tangle-current-block - 有什么办法可以做到这一点吗?

(这是 Orgmode: how to filter the blocks to be tangle? 的相关问题)

这可以通过使用前缀参数调用 org-babel-tangle 来实现。

所以C-u C-c C-v t应该做你想做的。

来自文档字符串:

With one universal prefix argument, only tangle the block at point. When two universal prefix arguments, only tangle blocks for the tangle file of the block at point.

以防万一有人对此绑定密钥感兴趣 - 我的初始文件包括以下内容:

(defun org-babel-tangle-block()
  (interactive)
  (let ((current-prefix-arg '(4)))
     (call-interactively 'org-babel-tangle)
))

(eval-after-load "org"
  '(progn
     (define-key org-mode-map (kbd "C-c b") 'org-babel-tangle-block)
))

而且我可以将光标下的代码块与 C-c b 纠缠在一起。

为了扩展 joon 的有用答案,我想分享这个片段:

(defun org-babel-tangle-from-edit-special ()
    (interactive)
    (org-edit-src-exit)
    (let ((current-prefix-arg '(4)))
      (call-interactively 'org-babel-tangle))
    (org-edit-special))

...可以与键绑定结合使用...

(add-hook 'org-src-mode-hook
  (lambda ()
   (local-set-key [f9] 'org-babel-tangle-from-edit-special)))

它允许您从 org-edit-special 模式中缠绕源块(因此,无论何时您点击 C-c ')。这就是我在找到这个 post.

时真正要找的东西