还是编辑Python的问题,这个窗口打个字就跳出来


我好惨哪,就打开一个写好的py文件,动一动就这样,调回去后动一下又这样了

import pandas as pd
from sklearn.feature_extraction import DictVectorizer
from sklearn import tree
from sklearn.model_selection import train_test_split

image

你自己配置了什么只有你自己知道啊😥️

为什么要附张不相干的图片?以后请不要这样做

发泄一下,以后我还是用颜文字吧 :stuck_out_tongue:

我好像就配置了这个

(setq python-shell-interpreter "python3.6")

问题又出现了,这几天本来是没问题的,换了pyright就出问题了

想帮忙,不过只感知到了你的情绪,没理解你的问题是啥(把bug是啥描述清楚,配置贴上来,是用原生配置还是doom/spacemacs)。你的帖子定位“灌水”区,还是很贴切嘛 :rofl:

好吧,那我补充一下
这个问题,本来用这个帖子的解决办法,ignore掉el-doc的function就好了
今天换了pyright之后,这个方法就失效了,接下来就是这个烦人的Python-Help老是跳出来

我已经试过下面这个方法了,我用的原生emacs

(use-package python-mode
  :mode "\\.py\\'"
  :bind (:map python-mode-map
	      ("C-c r" . py-shift-right)
	      ("C-c l" . py-shift-left)
	      ("C-c C-z" . run-python)
	      ("C-c C-c" . python-shell-send-buffer)
	      ("C-c C-r" . python-shell-send-region))
  :config
  (setq python-shell-interpreter "/usr/bin/python3.8")
  (setq-local eldoc-documentation-function #'ignore)
  (disable-command #'py-help-at-point))
1 个赞

看你这个 use-package,你其实用的是elpa上那个python-mode (python-mode-devs / python-mode · GitLab),所以你应该去看看它的eldoc是怎么定制的,整合了很多功能(毕竟是个定位近IDE的包)。

我以为和我一样,用于 python 的 major mode 是 Emacs自带的 python.el 提供,只给最基本的语法、运行支持,基本没啥花里胡哨的功能;其他一切IDE类型的功能都另由 lsp-mode + lsp-ui 来提供。(这段说的是我的实现;你用的是个名为python-mode的elpa上的大包。)

我的 python 的 use-package 是这样的:

(use-package python
  :ensure nil
  :config
  ... (之后定义个 python 解释器;加载lsp支持搞定)

你写的use-package python-mode应该自动下载 elpa 上的那个大包。 我当时也误用过这个 python-mode 大包(还以为就是最基本的呢),一堆东西,各种诡异的功能和 bug 永不停 (当时还有pymacs三傻这种遗留物)。

不对啊,我没有lsp的时候这个文问题就有了

对啊,我的意思就是它是你那个超级大包 python-mode的锅。和lsp-mode、pyright没关系。是那个大包配置的各种IDE支持features导致的(eldoc算是个典型了)。

那这个mode有替代的吗

我上面的回答很清楚了吧,我的选择是:

  • 用Emacs自带的基本python语法支持;(Emacs自带的python.el.gz的那个文件)
  • IDE的features交给lsp的mode、ui实现;
  • 至于编辑上的,自己稍微配下(不配也ok)。

LSP 带来了全新的支持模式:语言基本支持越简单、越稳定越好(有自带的就自带的),加上LSP mode的功能,完美、清爽。 曾经那种配成 “bug集装箱” 的模式过时了,那种包我是不想再碰了。

抱歉啊,我有点迷糊了
不过我的emacs好像找不到这个模式

(use-package python
  :ensure t
  :mode "\\.py\\'"
  :config
  (setq python-shell-interpreter "/usr/bin/python3.8"))

打开一个python文件,emacs提示我

这个时候我要显示调用python-mode才能解决,你说的是这个吗?

你是对的,是要 use-package python-mode才能自动加载(我是后面显示加载了)。你如果删了elpa下的python-mode,加了ensure nil,打开个python文件,用C-h m查看,它是python.el.gz自带包提供的;不加ensure nil就会从elpa上下那个python-mode包。

其实我现在也晕了,这个elpa的python-mode 和 Emacs自带的,难道是同源的?(我之前掉过大坑,一直也很晕)。有没有大触解释下,那不成elpa上的Emacs的head版本?(其实就是emacs自带包就是个它的stable版本,很多功能默认关着,所以感觉很干净、少问题?)

要不开个新帖问一下吧 :slightly_smiling_face:

大佬的配置这里看下,他的用法和我是一样的,也是自带的:

至于那个elpa的 python-mode 是个啥背景,就不清楚了;反正我选择用minimal stable的python语言支持,其余交给lsp。

这个是我的(差别仅仅是,我喜欢对每个语言配lsp语言相关,Centaur是都配到init-lsp.el下了):

我突然反应过来了,你:mode写全就成了。是名为python.el的文件提供了名为python-mode的major mode来加载python文件(这里包名和mode名差个-mode,因此要写完整)。

(use-package python
  :ensure nil
  :mode ("\\.py\\'" . python-mode)
  :config
  (setq python-shell-interpreter "/usr/local/bin/python"))

这就是个最小python环境支持。你然后追加lsp-mode就好了。它的文档很清楚很强大,要什么IDE UI feature 就开什么就好了(这个是lsp全系,也用于你开了lsp-mode的别的语言):

1 个赞

还行,终于弄好了 :slightly_smiling_face:

还有个use-package的问题,想明白了:

  • 我的配置没有设:mode,加载没有deferred,所以读取了整个python.el,知道打开py文件唤醒对应的major mode;
  • 你前面那个配置写了:mode,但只是半个,它使得python.el延迟加载了,init时没有执行那个文件给的loading相关;等到开py文件时,又找不到名为python的major mode (你省了,默认就是包名),所以就用fundamental mode了。