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

我装了最新的 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 。

应该就是第一个 company-capf 的作用,加上 ob-ipython。

但是你的截图里应该是已经关闭了 anaconda-mode

ob-ipython 进化了?scimax 有点落后了啊,而且 ob-ipython 更符合 org-babel 的惯例。

我刚才又试了一下,确实是 company-capf,spacemacs 的 python-mode 下默认没有打开 company-capf,所以你需要 tab 补全。加入以后不用按 tab 即可补全,不需要 imports。推荐把它和 company-anaconda 放一块,作为补充。

把它设为下面这样:

'((company-anaconda company-capf)
  (company-dabbrev-code company-gtags company-etags company-keywords)
  company-files company-dabbrev)

但是这种方法也不完美:没有 imports 的时候,因为不是用 jedi 来解析,所以不会显示 eldoc 信息。

Edit: 上面设置 company 后端的方式还是不太完美,如果两个后端 company-anacondacompany-capf 同时都起作用,会在补全菜单里显示重复选项。所以暂时还是放弃 company-capf 了。

1 个赞

建议你去 company 那边提交一个bug, 让作者添加几行代码消除重复选项。

这个不是 bug,是 feature

如果两个并列的后端所提供的选项没有重叠的话,这种就有意义了。

我现在把 python-mode 的第一个 company 后端设为 (company-anaconda company-dabbrev company-yasnippet) 这样就能在菜单里同时显示 anaconda (jedi),dabbrev (动态缩写),以及 snippet.

我的意思是: 如果两个备选项完全一样, 即使他们来自不同的后端,也不应该重复显示。。。。。这应该是bug

我还是忍不住说一声, 文学编程是自虐的一种方式。。。。。

这倒是个不错的想法,如果两个有相同的选项,只显示第一个,或者只显示信息最全的那个

你是被文学编程伤到有多深 :joy:

文学编程我感觉是一种极端理念, 现实情况下,我们能做到代码和文档同步就很不错了

所以,我更习惯结构化 comment,代码为主, 文档隐藏在 结构化comment 中, 必要的时候可以提取出来。

但是确实有人一直在践行文学编程,比如 CM 大学的 John Kitchin 教授,Scimax 的作者。

这难道不是一个硬币的正反面?

或者说,你这种方式有什么文学方式不具备的优势吗?

不一样,工具支持不一样, 我写结构化 comment 的时候,习惯用 org 语法,但在 comment 中,是没有工具支持的, 只能用脑袋解析,手动敲

所以,关注点还是文学编程反人类?除了那种超人,一般人适应不来?