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