关于Org-mode文学编程时自动补全代码的问题

我想到了一个好方法,等明天实现看看。

应该是今天 :joy:,等白天了吧

这条是不成立的,因为 :session 也可以命名

1 个赞

失察了,的确可以:

#+BEGIN_SRC python :results silent :session session1
  foo = 'block1'
#+END_SRC

#+BEGIN_SRC python :results silent :session session2
  foo = 'block2'
#+END_SRC

#+BEGIN_SRC python :results output :session session1
  print(foo)
#+END_SRC

#+RESULTS:
: block1

不过还是不够灵活。需要把当前块,跟被引用的块放到同一个 session,你仍然不能排除掉 session 中的某些 block,也不能引入其他 session 的 block。

最近装了 Lsp-mode,取消了 Anaconda-mode。发现效果出奇的好,比如在 Org-mode 中

  1. 不用再命名 Name ,和不用再次 import ** 了,都可以在 Edit buffer 中自动补全了。
  2. 后面的 org-src-block 都能补全之前的写的函数和参数了。

但是不知道为什么一下子可以实现了,是 Python-mode 还是 Lsp-mode。

肯定不是 python mode,那只是负责语法高亮与缩进

你这也太邪乎了,lsp 有 company 后端吗?我试的时候没有见到啊

你补全的时候需要按 tab 吗?

company 会使用 emacs 内置的补全方式作为后端, 只要lsp-mode 支持, comany就可以识别。

那个后端名字叫什么?

company-capf 估计是这个后端

嗯嗯,好像是这个

没按 Tab 键啊,我也觉得太邪乎了。

你是在 virtualenv 下面安装 python language server 的吗?

啊啊啊! 我忘了一件事啊!

我用 pyenv 来切换 python2 和 python3 的。而 python language server 我只装在 python3 下。 今天要用到 python2 ,于是我切换到 python2,重点是我忘了在 Python2 下安装 python language server

于是像往常一样打开 Org-mode,发现了上述那些事情。虽然 Python2 没装 python language server 但是 Buffer 里有显示 Python Language Server stderr。

总之代码补全只能在 ob-ipython 下成功,单单的 Python session 下没法补全(还是需要定义 Name)。

所以是 ob-ipython 的功劳了?ob-ipython 最近刚刚更新过

但是,因为我也是 scimax 用户,所以没法跟上更新。只能希望 John 能抽空把这个问题解决了:

ob-ipython 的作者已经主动过来联系了,不过可能是 Kitchin 老师最近比较忙,一直都没有更新 scimax。

我装了最新的 ob-ipython ,去掉 Lsp-mode,重新装上 Anaconda-mode 。

Org-mod 的补全还是老样子,需要按 Tab 键。:joy:

不需要写 Imports 也可以补全吗?

嗯,不需要再写一遍 import。

所以现在为了良好的文学编程环境就是装 Lsp-mode,Lsp-python。不装 Python language sever。 听起来是不是太魔幻了。:joy:

我没看错吧?所以你到底是怎么设置的?

有:

ob-ipython

lsp-mode

lsp-python

没有 python language server 和 anaconda-mode?

我试着把 Lsp-mode 和 Lsp-python 关掉,也能实现。

所以说还是 ob-ipython 的功劳,不知道为什么 spacemacs 需要按 Tab 键。 而 Doom Emacs 却能直接补全。

不好意思哈,虚惊一场:rofl::rofl::rofl:

1 个赞

能不能查看一下你在 doom 下能够自动补全时的 company-backends 变量?谢谢

还有 doom 应该也是用的 anaconda 吧?

恩 doom 也是用的 Anaconda-mode 。