lokta
2017 年4 月 26 日 03:50
1
emacs小白求助,mac已经用pip安装了anaconda-mode,安装没有任何异常。可是在spacemacs中python mode怎么也不能使用python补全。也没有anaconda-mode的buffer。
启动REPL,好像只是auto-complete的backend起作用了:
Shell native completion is enabled.
Company: An error occurred in auto-begin
Company: backend (company-files company-capf) error “Invalid search bound (wrong side of point)” with args (prefix)
觉得是安装的anaconda-mode并没有北spacemacs用到。不知道为啥了,求助各位。已经看了相应的帖子,没有太大帮助。
lokta
2017 年4 月 26 日 05:54
2
我在home目录下的.emacs.d目录下也没有找到anaconda-mode目录。但是在spacemacs里查看anaconda-mode package已经安装了,实在不知道为什么
正常情况下应该不会用到 pip。
感觉是你安装的方法不对。
lokta
2017 年4 月 26 日 06:33
4
我是按照官方的python layer弄的,理解错了安装方式,在shell命令行用pip安装了anaconda-mode。
但是我用M-x查看spacemacs安装的包的时候,看到anaconda-mode已经安装了。这个anaconda-mode正确的安装方式是什么呢?
你可以看一下这个包的安装路径在哪里。
对Emacs来说只要指定了路径,插件不管保存在哪里都可安装。
不贴出错信息的提问都是耍流氓
https://github.com/proofit404/anaconda-mode#usage 已经写明了补全的几种方法:
按快捷键 C-M-i 手动补全
通过 company-mode
或 auto-complete-mode
自动补全
没起作用的原因有可能:
anaconda-mode (包括 company-mode/auto-complete-mode) 没有启用
anaconda-mode-server 没有安装/启动
而 anaconda-mode-server 在首次触发补全的时候会自动安装,安装位置就在 ~/.emacs.d/
lokta
2017 年4 月 26 日 08:52
7
anaconda-mode包在.emacs.d/elpa/anaconda-mode-20170405.301这个目录下。
lokta
2017 年4 月 26 日 08:59
8
看了Message buffer。没有关于anaconda-mode的任何报错,也没有anaconda-mode buffer。唯一一个报错就是打开python文件的时候有个这个消息:
File mode specification error: (file-error Cannot open load file No such file or directory yasnippet)
其他任何报错都没有。启动REPL,输入几行python code, Message buffer里给出的信息是:
Shell native completion is enabled
Company: An error occurred in auto-begin
Company: backend (company-files company-capf) error “Invalid search bound (wrong side of point)” with args (prefix)
我用M-x package-list-packages,显示只有anaconda-mode有安装,没有看到anaconda-mode-server
你应该打开 debug 模式 SPC t D ,报错以后,把错误信息贴过来
lokta
2017 年4 月 26 日 09:25
10
打开一个project里的python文件,报错是这个:
Debugger entered--Lisp error: (file-error "Cannot open load file" "No such file or directory" "yasnippet")
(yas-global-mode 1)
(if yas-global-mode nil (yas-global-mode 1))
spacemacs/load-yasnippet()
run-hooks(change-major-mode-after-body-hook prog-mode-hook python-mode-hook)
apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook python-mode-hook))
run-mode-hooks(python-mode-hook)
python-mode()
set-auto-mode-0(python-mode nil)
set-auto-mode()
normal-mode(t)
after-find-file(nil t)
find-file-noselect-1(#<buffer app.py> "~/Documents/Workspaces/flask/flask/app.py" nil nil "~/Documents/Workspaces/flask/flask/app.py" (39515434 16777220))
find-file-noselect("/Users/shu/Documents/Workspaces/flask/flask/app.py" nil nil nil)
find-file("/Users/shu/Documents/Workspaces/flask/flask/app.py")
find-file-at-point("/Users/shu/Documents/Workspaces/flask/flask/app.py")
#[257 "\306\307\310\"\205\f\311\" \312\313\310eA\2033
\203%\314\312\"\202}\315\316A\"\210\317@!\202}\320!\204N\204N\311\321a\"\203N\211\322\"\202}?\205W\323!\324\203i\325!\203i\326!\202z\203ra\202z!\205za!\262+\207" [ffap-url-regexp helm-ff-newfile-prompt-p helm--reading-passwd-or-string find-file-wildcards ffap-newfile-prompt helm-current-prefix-arg helm-marked-candidates :with-wildcard t string-match nil #[513 "\203
\303\304\305\"!\205=\306!\307!\203 \310\311\312!\"\210\202%\313\314\"\210\210\211\2032\315!\211\nB\211\203<\316!\206=\317\207" [confirm-nonexistent-file-or-buffer helm-ff-default-directory helm-ff-history y-or-n-p format "Create directory `%s'? " directory-file-name file-exists-p error "Mkdir: Unable to create directory `%s': file exists." helm-basename make-directory parent file-name-as-directory helm-find-files-1 t] 8 "\n\n(fn DIR &optional HELM-FF)"] dired-simultaneous-find-file mapc find-file-noselect find-file file-exists-p "/$" helm-ff helm-basedir find-file-at-point file-directory-p substitute-in-file-name] 10 ("/Users/shu/.emacs.d/elpa/helm-20170409.26/helm-files.elc" . 108895)]("/Users/shu/Documents/Workspaces/flask/flask/app.py")
apply(#[257 "\306\307\310\"\205\f\311\" \312\313\310eA\2033
\203%\314\312\"\202}\315\316A\"\210\317@!\202}\320!\204N\204N\311\321a\"\203N\211\322\"\202}?\205W\323!\324\203i\325!\203i\326!\202z\203ra\202z!\205za!\262+\207" [ffap-url-regexp helm-ff-newfile-prompt-p helm--reading-passwd-or-string find-file-wildcards ffap-newfile-prompt helm-current-prefix-arg helm-marked-candidates :with-wildcard t string-match nil #[513 "\203
\303\304\305\"!\205=\306!\307!\203 \310\311\312!\"\210\202%\313\314\"\210\210\211\2032\315!\211\nB\211\203<\316!\206=\317\207" [confirm-nonexistent-file-or-buffer helm-ff-default-directory helm-ff-history y-or-n-p format "Create directory `%s'? " directory-file-name file-exists-p error "Mkdir: Unable to create directory `%s': file exists." helm-basename make-directory parent file-name-as-directory helm-find-files-1 t] 8 "\n\n(fn DIR &optional HELM-FF)"] dired-simultaneous-find-file mapc find-file-noselect find-file file-exists-p "/$" helm-ff helm-basedir find-file-at-point file-directory-p substitute-in-file-name] 10 ("/Users/shu/.emacs.d/elpa/helm-20170409.26/helm-files.elc" . 108895)] "/Users/shu/Documents/Workspaces/flask/flask/app.py")
helm-find-file-or-marked("/Users/shu/Documents/Workspaces/flask/flask/app.py")
helm-execute-selection-action-1()
helm-execute-selection-action()
helm-internal((helm-source-projectile-buffers-list helm-source-projectile-files-list helm-source-projectile-projects) nil "[flask] pattern: " nil nil "*helm projectile*" nil nil nil)
apply(helm-internal ((helm-source-projectile-buffers-list helm-source-projectile-files-list helm-source-projectile-projects) nil "[flask] pattern: " nil nil "*helm projectile*" nil nil nil))
helm((helm-source-projectile-buffers-list helm-source-projectile-files-list helm-source-projectile-projects) nil "[flask] pattern: " nil nil "*helm projectile*" nil nil nil)
apply(helm ((helm-source-projectile-buffers-list helm-source-projectile-files-list helm-source-projectile-projects) nil "[flask] pattern: " nil nil "*helm projectile*" nil nil nil))
helm(:sources (helm-source-projectile-buffers-list helm-source-projectile-files-list helm-source-projectile-projects) :buffer "*helm projectile*" :truncate-lines nil :prompt "[flask] pattern: ")
helm-projectile()
projectile-switch-project-by-name("~/Documents/Workspaces/flask/")
#[257 "\301\302!)\207" [projectile-completion-system helm projectile-switch-project-by-name] 3 "\n\n(fn PROJECT)"]("~/Documents/Workspaces/flask/")
helm-execute-selection-action-1()
helm-execute-selection-action()
helm-internal(helm-source-projectile-projects nil "[-] Switch to project: " nil nil "*helm projectile*" nil nil nil)
apply(helm-internal (helm-source-projectile-projects nil "[-] Switch to project: " nil nil "*helm projectile*" nil nil nil))
helm(helm-source-projectile-projects nil "[-] Switch to project: " nil nil "*helm projectile*" nil nil nil)
apply(helm (helm-source-projectile-projects nil "[-] Switch to project: " nil nil "*helm projectile*" nil nil nil))
helm(:sources helm-source-projectile-projects :buffer "*helm projectile*" :truncate-lines nil :prompt "[-] Switch to project: ")
helm-projectile-switch-project(nil)
funcall-interactively(helm-projectile-switch-project nil)
call-interactively(helm-projectile-switch-project nil nil)
command-execute(helm-projectile-switch-project)
看你的回复我很捉急,根本不在点上。你一直强调 anaconda-mode 已经安装,但是没有去确认是不是已经启用。
anaconda-mode-server 是为 anaconda-mode 提供补全的后台服务。anaconda-mode 启用之后,在首次使用补全的时候会自动安装。
你要做的是:
启用 anaconda-mode
触发补全,最简单就是手动调用一下 M-x anaconda-mode-complete
观察到底是在哪个步骤出错
lokta
2017 年4 月 26 日 09:51
12
不好意思。按照你说的,启用了anaconda-mode,然后现在在.emacs.d目录下也有anaconda-mode目录了。
在anaconda-mode buffer里只有一条信息:
anaconda_mode port 49861
但是在python文件里按TAB还是不见自动补全的popup list。
Python layer官方文档里说的这个自动启动anaconda-mode,这行加在哪里呢?
You can automatically enable anaconda-mode in all python buffers with following code in your configuration:
(add-hook 'python-mode-hook 'anaconda-mode)
lokta:
但是在python文件里按TAB还是不见自动补全的popup list。
Python layer官方文档里说的这个自动启动anaconda-mode,这行加在哪里呢?
You can automatically enable anaconda-mode in all python buffers with following code in your configuration:
(add-hook 'python-mode-hook 'anaconda-mode)
我不清楚 Python layer (你也没给链接)。
anaconda-mode 本身并不具备自动补全,需要 company-anaconda 和 auto-complete-mode 配合,在 https://github.com/proofit404/anaconda-mode#usage 里有说明。
你现在 sever 已经启动了,就不要再纠结 TAB,先手动验证一下 M-x anaconda-mode-complete 是否会补全。然后再考虑自动补全。
lokta
2017 年4 月 26 日 11:15
15
非常感谢。手动M-x anaconda-mode-complete
是可以补全的。现在就看怎么能自动补全了。
我之前遇到不能自动补全的原因是没有把auto-completion layer加上