采用 session 模式时,代码块的自动补全有什么好办法吗?
比如这种
#+begin_src python :session
import numpy as np
#+end_src
#+begin_src python :session
xp = np.linspace(5, 25, 200)
#+end_src
第一个代码块执行后,第二个可以执行,但是在编辑时无法自动补全,除非将第二个代码块改成下面这样:
#+begin_src python :session
import numpy as np
xp = np.linspace(5, 25, 200)
#+end_src
请问有什么办法不要在每个代码块中添加 import 同时还能自动补全的?
我使用的是 elpy。
             
            
              
              
              
            
                
           
          
            
            
              我估计有点难,之所以可以执行,是 org-mode 在维护 session。编辑的时候则进入了 python-mode(major) + org-src-mode(minor),不知道 elpy 是否具备跨 block 的能力,你可以去 GitHub - jorgenschaefer/elpy: Emacs Python Development Environment 提 issue。
如果用 :session 目的是共享代码,有另一种方式:
#+NAME: share_code
#+BEGIN_SRC python
  import numpy as np
#+END_SRC
#+BEGIN_SRC python :noweb yes
  <<share_code>>
  xp = np.linspace(5, 25, 200)
#+END_SRC
可以跳过 share_code,直接执行第二个 block。
             
            
              
              
              
            
           
          
            
            
              这种方式共享代码会有一个缺点,多个 block 下,可能会 exceeds max-specpdl-size