orgmode 中 python 代码的自动补全(session 模式)

采用 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