web-mode中行数太多会导致emacs卡顿

html文件也就几百行,但在style="width:10px;",修改width(在10后面一直按0试试),文件只有几十行不会卡顿,但有几百行时根本动不了,这应该是company-web的锅,spacemacs上也有重现,请教这怎么修复?

几百行没道理卡。。profile看一下占cpu的热点函数是啥吧。

天呐,以前Windows没碰到过这问题,mac用了几天就碰上了。profile了一下是company-css这个后端特别卡,我现在

(with-eval-after-load 'web-mode
                            (setcar company-backends-web-mode '(company-web-html)))

把第一组从'(company-web-html company-css)改成'(company-web-html),有所改善,但是仍然有点卡。profile如下,这回看不懂了。

- ...                                                             927  62%
 - cl-delete-if                                                   925  62%
  - apply                                                         925  62%
   - cl-delete                                                    925  62%
    + #<compiled 0x4420d9e3>                                      925  62%
 + ivy--resize-minibuffer-to-fit                                    1   0%
 + golden-ratio--resize-window                                      1   0%
   Automatic GC                                                     0   0%
+ command-execute                                                 323  21%
+ timer-event-handler                                             120   8%
+ linum-update-current                                             64   4%
+ company-post-command                                             26   1%
+ redisplay_internal (C function)                                  18   1%
+ evil-repeat-post-hook                                             1   0%

(with-eval-after-load 'web-mode
                            (setq company-backends-web-mode (cdr company-backends-web-mode)))

company-web-html也去掉了,现在似乎不卡了。

另外有个小问题,这样改下来company-backends是去掉了前述两个后端后的结果,但是company-backends-web-mode变成了nil,有点奇怪,但是补全仍然能进行。这是因为company-backends-web-mode是在打开一个文件时设定当前buffer的backends时套用的,已经打开的不会受这个变量影响。

我本机是linux,出现了这个问题,目前还找不出什么解决方案,只能在写style=时切换到html-mode,之后在切回来,profile也没找出是那个函数调用导致的

这个问题有人解决了吗?我也碰到了这个问题了。帮帮忙。

禁用company-css即可。

(setq company-backends
      (remove 'company-css company-backends))
1 个赞

谢谢seagle0128大大耐心解难。又可以开心地玩emacs了。

@seagle0128 以后emacs上的补全会不会由lsp一统天下呢?

不客气。目前company作者已经fix了Emacs25上的问题,我测试来看性能好了不少,但还是有些许卡顿。不喜欢还是可以禁用company-css.

lsp确实很有前途。从VSCode上的表现来看很惊艳,如果发展好确实可能一统天下。 个人感觉目前lsp-mode还不是很成熟,表现不够稳定。但是lsp-ui,lsp-flycheck的设计还是值得推崇的,就看后面发展了。