如何仅对一个代码块进行org-babel-tangle?

8

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

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

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

有没有仅编织特定代码块而不更改标题选项的方法?
我正在为Sphinx生成这些文件,并且为了减少编译时间,我想仅编织我目前正在工作的文件。
如果有一个命令,例如org-babel-tangle-current-block,那将是很好的 - 有没有办法做到这一点?
(这是一个相关问题:Orgmode:如何过滤要编织的块?
3个回答

13

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

因此,C-u C-c C-v t应该可以满足您的需求。

从文档字符串中可以看到:

使用一个通用前缀参数时,只会整理当前位置的代码块。 当使用两个通用前缀参数时,只会整理与当前位置的代码块对应的整理文件中的代码块。


8

如果有人想将一个键绑定到这个命令上,可以参考我的初始化文件:

(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 键组合来操作光标下的代码块。


你知道是否可以打印刚创建的文件名,而不是包含源代码块的 .org 文件吗? - Guilherme Salomé

0

除了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 '时)。这正是我在查找此帖子时实际寻找的内容。


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