为何写 React.js 没有相关自动补全

已安装了 reactlayer,

js 代码的补全跟之前一样正常, 但是 React 的方法都没有补全. 如: componentDidMount() 这些方法都没有提示. 是跟配置 .tern-project 有关系么?

而且, 只要开启了 react-mode, 智能提示就有点乱, 连符号都出智能提示, 比如按了逗号或者分好什么的都会弹出来:

这个 layer 唯一的好处就是缩进和高亮是正常的.

按了逗号弹出来是prefix-length太短了:

tern一直没用,应该是当初在windows上碰上卡死了之类的,最近用mac发现web-mode下company-css巨卡,于是禁用了,什么库啊什么spec啊,不存在的,只要company-dabbrev就够了。

把web-mode-hook改下吧,用这个hook还是有问题,改成company-mode-hook就好了

不是啊,这个0还是1是spacemacs加在web-mode-hook里的,describe-variable web-mode-hook可以看到有spacemacs的函数,那里面改了prefix-length

不是这个原因, 我的前缀就是设置的 2.

是这样的,我也看了html这个layer中关于company的设置的源码,确实如你所说的一样,但是用
web-mode-hook在我这里这个设置真的是时灵时不灵的,后来我想这个变量其实设置的还是company-mode里的变量,只是设置的时间是加载web-mode之后,我要统一设置company的补全行为,我现在的配置是这样的: 在我自己的layer里: funcs.el:

(defun czh/company-init ()
  "set my own company-idle-delay and company-minimum-prefix-length"
  (interactive)
  (setq-local company-idle-delay czh/company-idle-delay)
(set (make-local-variable 'company-minimum-prefix-length) 
     czh/company-minimum-prefix-length))

config.el:

(defvar czh/company-minimum-prefix-length 1
  "my own variable for company-minimum-prefix-length")

(defvar czh/company-idle-delay 0
"my own variable for company-idle-delay")

(add-hook 'company-mode-hook #'czh/company-init)

spacemacs这个配置在设置web-mode的时候重新设置了company的company-minimum-prefix-length这个变量

妥妥的解决了. 多谢啦兄弟.

直接setq-default不行么?

不行的,在spacemacsmaster分支里html layer里这部分的设置是

(add-hook 'web-mode-hook 'spacemacs//company-web-minimum-prefix-length))

(defun spacemacs//company-web-minimum-prefix-length ()
  "Set company minimum prefix length to 0 for the current buffer only."
  (set (make-local-variable 'company-minimum-prefix-length) 0))

develop分支里的设置是

  (spacemacs|add-company-backends
    :backends (company-web-html company-css)
    :modes web-mode
    :variables
    ;; see https://github.com/osv/company-web/issues/4
    company-minimum-prefix-length 0)

这里的spacemacs|add-company-backendsspacemacsdevelop分支定义的一个宏,在master分支是没有的,为了兼容master分支,就直接按照master分支的方法修改了

1 个赞

spacemacs 官方合并了一个解决方案,后面应该不用自己配置了。