个人笔记,如有转载,请注明出处。

——by realasking

2020-03-26 增加关于(jedi:setup)的说明

2020-03-21 最初版本

最近一两年,因为使用python比较多,而其它ide总有让人不满意的地方,以及一些其它原因,就将主要使用的编辑器从原先使用的Linux下的vimWindows下的notepad++统一替换为了Emacs。经过较长时间的磨合和多次重构配置文件,Emacs环境已经基本符合自己的习惯。然而,python补全始终是个比较大的问题:在Linux下使用elpycompany虽然有可以感知的延迟,但是还能忍受,在Windows 10下延迟就很大了,特别是补全np.array之类的内容的时候,能等待数秒,甚至十几秒。

这一两年来,翻遍了网页也没有找到解决办法,于是就开始尝试其它方案,最近两天终于折腾出一个反应明显更快的配置。我使用了Emacs-jediauto-completeformat-all,以及Emacs自带的python-mode,在LinuxWindows下虽然仍然有延迟,但比起elpylsp来说,补全还是快了不少,经过简化的配置如下:

(defvar myPackages
  '(format-all
    jedi
   ))
(mapc #'(lambda (package)
      (unless (package-installed-p package)
        (package-install package)))
      myPackages)
(setq python-shell-interpreter "ipython"
      python-shell-interpreter-args "--simple-prompt -i")
(global-set-key [f6] 'run-python)
(defun python-mode-modify()
  (hs-minor-mode t)
  )
(add-hook 'python-mode-hook (lambda ()
                  (jedi:ac-setup)
                  (setq ac-use-quick-help nil)
                  (setq jedi:tooltip-method nil)
                  (setq jedi:complete-on-dot t)
                  (auto-complete-mode 1)))
(add-hook 'python-mode-hook 'python-mode-modify)

补充:有人问我为什么不写(jedi:setup),这个在jedi的官网上是有说明的,如果只需要补全,用(jedi:ac-setup)就够了,如果还需要签名文档提示、函数参数表之类的,就用(jedi:setup)。用(jedi:ac-setup)的时候的确不需要设置(setq jedi:tooltip-method nil)这一句,这一句的意思是在minibuffer中显示签名文档提示,简化配置贴上来的时候我忘了删了。