Emacs Jedi自动补全在初始化时无法工作

5

我前几天通过el-get安装了jedi和其他一些包,一开始所有功能都很好用(自动补全、弹出菜单等)。

然而,在过去的几天里,jedi停止工作了(自动补全、弹出菜单和函数参数提示不再起作用)。

我发现这个问题之所以不起作用的部分原因是,在启动时某种原因导致自动补全未启用。我尝试在我的.emacs文件中添加(setq auto-complete-mode t)来使它在el-get加载jedi之前或之后启用auto-complete,但是尽管启用了auto-complete,它仍然不能正常工作。相反,我必须在emacs加载后使用M-x auto-complete-mode来启用auto-complete(我还尝试了这里的建议Emacs auto-complete-mode at startup,但是当emacs加载时会出现一堆错误)。

此外,当我键入M-x jedi RET时,jedi故障排除页面上列出的某些命令(例如jed:setup-keys)似乎已经丢失了。

我似乎也遇到了与此人相同的问题:emacs-jedi does not find numpy completions,但我不确定这两个问题是否有关联。


我本来想建议使用(global-auto-complete-mode t),但是我看到这已经在你链接的答案中了。你可以尝试使用--debug-init启动emacs,并将你得到的错误发布在这里吗? - Rob
我得到了这个错误: 调试器进入--Lisp 错误:(变量 z 未定义) eval-buffer(#<buffer *load*> nil "/home/matthew/.emacs" nil t) ; 在缓冲区位置2处读取 load-with-code-conversion("/home/matthew/.emacs" "/home/matthew/.emacs" t t) load("~/.emacs" t t) #[nil "\205\264 - orentago
实际上忽略那个错误,因为它是由我的.emacs中的拼写错误引起的。这是实际的错误:Debugger entered--Lisp error: (void-function global-auto-complete-mode) (global-auto-complete-mode t) eval-buffer(#<buffer *load*> nil "/home/matthew/.emacs" nil t) ; Reading at buffer position 527 load-with-code-conversion("/home/matthew/.emacs" "/home/matthew/.emacs" t t) load("~/.emacs" t t) #[nil "\205\264 - orentago
2个回答

3
我遇到了与auto-complete-mode相同的问题。我不得不手动启动它。
作为一个完全的新手,我为此苦苦挣扎了一段时间,但推导出了解决方法。也许不是很优雅,但它确实有效...在启用jedi ac之前将其作为钩子添加到python-mode中。
;;enable jedi autocompletion in python
(add-hook 'python-mode-hook 'auto-complete-mode)
(add-hook 'python-mode-hook 'jedi:ac-setup)

你尝试过http://tkf.github.io/emacs-jedi/#troubleshooting中的所有方法了吗?正如emacs-jedi文档所建议的那样,你可以将`(add-hook 'python-mode-hook 'auto-complete-mode)替换为(global-auto-complete-mode t)。使用global-auto-complete-mode更好,因为你不需要为想要启用auto-complete-mode的所有模式添加auto-complete-mode`。话虽如此,除了冗余之外,你的设置没有任何问题。 - tkf
我尝试了(global-auto-complete-mode t),但不幸的是它没有起作用。我也按照“故障排除”部分中的所有步骤进行了操作,但没有成功。出于某种原因,这是我唯一能够使用的方法。 - caisah
你的 ac-modes 中是否包含了 python-mode? - tkf
是的,我的 ac-mode 有24个“模式”,包括 python-mode - caisah

2
请先查看文档中的故障排除部分:http://tkf.github.com/emacs-jedi/#troubleshooting
我建议您从文档中提到的make tryout开始尝试,像这样:
 curl -fsSkL https://raw.github.com/rejeep/carton/master/go | sh
 make CARTON=$HOME/.carton/bin/carton tryout

文档中提到:

这将安装Jedi.el的要求,与您的本地设置分离在.emacs.d中。 您还可以检查配置文件tryout-jedi.el,该文件由make tryout使用,以查看最小的工作配置。 如果设置Jedi.el时遇到问题,请比较您的配置文件和tryout-jedi.el


好的,我尝试了一下,结果和我的原始帖子中链接里的一样。我得到了以下信息:mkdir -p elpa EL4T_EMACS=emacs EMACS=tools/el4t/emacs.sh carton install 2> elpa/install.log Installing modules using carton.lock (deployment mode) make: *** [elpa] Error 2自动完成仍未在启动时启用。对于不是numpy/scipy函数的函数参数,我可以获得上下文帮助,但除此之外我什么也没有得到。我的整个配置都很难调试,因为配置被埋藏在我的.emacs.d目录下的el-get目录中的某些文件中,所以找到配置是一项毫无意义的任务。 - orentago
你是使用 make tryout 还是 make CARTON=... tryout?我猜你所用的 carton 和我说的不同(可能是 Perl 的那个)。在这种情况下,请确保指定 CARTON。顺便说一句,你说当你把(global-auto-complete-mode t)放到你的配置中时出现了一个错误,但你把它放在哪里了?确保在加载 auto-complete 之后放置它(即在调用 (el-get 'sync) 或类似内容之后)。在调用 global-auto-complete-mode 之前,你可能需要先调用 (require 'auto-complete) - tkf
好的,我已经安装了Carton,当我运行curl命令时,它告诉我Carton已经安装了。但是我的.carton目录中没有二进制文件,所以我使用/usr/bin/carton: make CARTON=/usr/bin/carton tryout rm -rf *.elc EL4T_EMACS=emacs EMACS=tools/el4t/emacs.sh /usr/bin/carton exec tools/el4t/emacs.sh -Q -batch \ -L . -f batch-byte-compile *.el 未知选项:q 未知选项:batch 未知选项:l 未知选项:f ... - orentago
... env/bin/pip install --requirement requirements.txt env/bin/pip:5: UserWarning: Module dap was already imported from None, but /usr/lib/python2.7/dist-packages is being added to sys.path from pkg_resources import load_entry_point Requirement already satisfied (use --upgrade to upgrade): jedi>=0.5b4 in ./env/lib/python2.7/site-packages (from -r requirements.txt (line 1)) ... - orentago
... Requirement already satisfied (use --upgrade to upgrade): epc in ./env/lib/python2.7/site-packages (from -r requirements.txt (line 2)) Requirement already satisfied (use --upgrade to upgrade): argparse in /usr/lib/python2.7 (from -r requirements.txt (line 3)) Requirement already satisfied (use --upgrade to upgrade): sexpdata in ./env/lib/python2.7/site-packages (from epc->-r requirements.txt (line 2)) Cleaning up... EL4T_EMACS=emacs EMACS=tools/el4t/emacs.sh /usr/bin/carton exec tools/el4t/emacs.sh -Q -L . -l tryout-jedi.el Unknown option: q Unknown option: l Unknown option: l - orentago
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接