2015-04-06 57 views
7

我希望能够在组织缓冲区中的代码块中逐行执行代码。我的目标是逐行执行代码,而不必一次运行所有代码块(C-c C-c),而不必切换到特殊缓冲区(C-c')。我使用R,但它可以应用于任何其他语言。有没有办法做到这一点?如何在组织模式下逐行评估代码?

示例:仅执行下面代码块中的第一行,以便变量a在会话中获得值7。

#+BEGIN_SRC R :session 
a <- 3 + 4 
a <- 5 + 6 
#+END_SRC 
+0

你会用什么标准来知道应该执行哪条线? – 2015-04-06 13:36:03

+0

评估标准是光标下的线。我想最后我应该调用函数ess-eval-region-or-line-and-step,但不知道最好的方法是什么。当光标位于代码块内时,也许更改为ess-mode? – Rodrigo 2015-04-08 19:37:04

+0

@Rodrigo澄清一下,你是否关心输入到##结果中的输出?否则,就像你说的那样,通过运行'M-x ess-eval-region-or-line-and-step'来做到这一点是微不足道的。你可以给这个键绑定,并使用它,即使你的缓冲区不在ess模式 – 2015-04-09 21:16:48

回答

5

不是一个完整的答案,但我会说,如果你想运行线由行,它可能是更好,直到你找出你真正想做的事,这在实际的R对话。

如果你真的想在多个阶段的结果,你可以将代码分割成多块,他们会使用相同的R对话“会话”

#+BEGIN_SRC R :session                                               
a <- 3 + 4                                                  
#+END_SRC                                                  

#+RESULTS: 
: 7                                                    

#+BEGIN_SRC R :session                                               
a <- a + 6                                                  
#+END_SRC                                                  

#+RESULTS: 
: 13                                                   
+0

这看起来很奇怪,但我的目标正是为了避免在缓冲区中存在很多块,这会影响可读性。我的目标是拥有大量的代码,并且能够逐行运行以进行测试。 – Rodrigo 2015-04-08 19:51:05

+0

在这种情况下,我们可能可以修改一些org-babel代码来运行一行代替整个src模块。我会研究这个。我想我们可以通过在ob-R.el中修改一个像'org-babel-R-evaluate-session'这样的函数来实现它(请参阅http://orgmode.org/w/?p=org-mode中的代码。 GIT中; A = blob_plain; F =口齿不清/ OB-R.el; HB = HEAD) – 2015-04-09 21:31:09

2

在一个代码块,你可以使用C-c C-v z切换与代码进行会话。然后,您可以逐行评估,就好像您在.R文件中一样,然后返回到.org文件中。C-'

查看文档。或​​在.org文件中作一些快速参考。