在spacemacs中配置php-extras函数自动补全.
php函数补全成功,但是company的上下文自动补全却无法显示
请问下如何解决,附上配置图片:
成功补全php函数
无法补全变量
spacemacs的个人layer配置
在spacemacs中配置php-extras函数自动补全.
php函数补全成功,但是company的上下文自动补全却无法显示
请问下如何解决,附上配置图片:
成功补全php函数
无法补全变量
spacemacs的个人layer配置
应该是 backends 没有设置好,贴出你的 php-mode
下的 company-backends
变量的值看看。
另外你要的上下文补全,是不是指 company-dabbrev
?如果是的话,把它和 company-php
(是不是这个?还是说你用的 company-capf
?我没有用过 php-mode
,这里只是猜测,但是基本意思就是这)并列作为你的 company-backends
变量的第一项应该就ok了。
之前也遇到类似问题(我用的是 ac-php),php 内置函数和用户定义的类成员(部分)能补齐,但是当前 buffer 里的变量不会出现在补全列表中。
company-backends
看起来没问题,该有的都有:
(company-ac-php-backend company-tern
(company-capf company-dabbrev-code)
company-dabbrev)
似乎 company 在处理多个 backend 时还存在问题,以下帖子都提到:
不过里边的解决方式不可取,会造成全局污染。我最后的解决方案是,TAB 的时候自己调用 company-dabbrev-code
:
(defun indent-or-complete ()
"缩进/补全本地变量"
(interactive)
(let ((chr (char-before (point))))
(if (or (and (>= chr ?0) (<= chr ?9))
(and (>= chr ?A) (<= chr ?z)))
(call-interactively 'company-dabbrev-code)
(call-interactively 'indent-for-tab-command))))
(add-hook 'php-mode-hook
(lambda ()
(define-key php-mode-map (kbd "TAB") 'indent-or-complete)))
内置函数和类成员自动补,buffer 变量手动补全,就这样吧,反正这个世界本来就不完美(主要还是无力解决 company 本身的问题,看到源代码头痛😄)
试试
((php-extras-company company-dabbrev) ....)
注意前面两个是用一对括号括起来的,表明是复合 backend。还有就是注意应该是 company-dabbrev
而不是 company-abbrev
。
dabbrev
= dynamic abbrev 意为动态缩写
谢谢你的回答,按照你的回答问题解决了。
万分感谢。
谢谢你的回答,我按照@et2010 的方法解决了。
我放弃 spacemacs 很久了,不知道它现在 php 补全效果如何?我平时也写 php,所以对这块比较关心。但是刚才小试了一下,并不太理想,不知道是不是我配置漏掉了什么。
master 分支(* 8e1af145 Fix typo in release note [syl20bnr] 2017-04-06)
效果如下:
可以看到,company 只是把当前 buffer 里的关键字列出来,甚至 $this->
的补全项里面有 this / private / function 这些。
develop 分支(* ca28bde0 purpose: disable popwin-mode at startup [bmag] 2017-09-16)
我看到 develop 分支已经添加 ac-php, 应该是为了改善 master 分支不能补全类成员的问题(ac-php 本身其实也不太完善), 但是可能被谁 push 坏掉了,直接 No completion found.
我的配置文件很简单,只启用 helm, auto-completion, php 三个 layer:
⋊> diff -u ./core/templates/.spacemacs.template .spacemacs
--- ./core/templates/.spacemacs.template 2017-08-18 18:14:40.000000000 +0800
+++ .spacemacs 2017-09-19 11:05:23.000000000 +0800
@@ -36,9 +36,10 @@
;; `M-m f e R' (Emacs style) to install them.
;; ----------------------------------------------------------------
helm
- ;; auto-completion
+ auto-completion
;; better-defaults
emacs-lisp
+ php
;; git
;; markdown
;; org
我用的是company+php-extras+php-mode。
自己测试了下在php上面补全还可以。
在.spacemacs.d用户配置custom-set-variables里面添加backends设置,代码如下
;; 设置company补全
'(company-backends
(quote
(
(company-dabbrev php-extras-company)
company-dabbrev company-bbdb company-nxml company-css company-eclim company-semantic company-clang company-xcode company-cmake company-capf company-files
(company-dabbrev-code company-gtags company-etags company-keywords)
company-oddmuse company-dabbrev)
))
不知道能不能帮到你,你试试看。
你好,怎么解决的,我也遇到同样的问题,可以分享下配置吗,我也在用spacemacs 写 php
这句话是不是写出来的和想的反了?buffer内的变量可以dabbrev补全,内置函数自己人肉写出来?
没反。由于 company 可能存在问题,导致复合 backends 没有完全起作用,自动补全只有:
但是当前 buffer 或者函数里的变量没有出现在补全列表,所以额外绑定快捷键手动执行 dabbrev。