Emacs如何配置company-bootstrap在web-mode下自动激活?
web-mode下company补全自动生效修复方案
原有配置失效原因
company-backends平级列表的匹配逻辑为顺序排他:列表中靠前的后端只要返回补全候选,就不会调用后续后端。原配置将company-css放在首位,HTML class属性场景下会被该后端优先匹配,直接拦截后续company-web-html、company-bootstrap的补全逻辑。company-bootstrap未内置class属性上下文自动识别逻辑,默认不会在对应场景主动触发。- 原配置中局部变量设置方式存在兼容问题,部分web-mode版本下hook执行时缓冲区局部变量未正确生效。
生效配置
直接替换原有web-mode-hook配置为以下代码:
(add-hook 'web-mode-hook (lambda () (company-mode 1) ;; 补全后端使用分组配置,同组内后端可协同触发,无排他问题 (setq-local company-backends '((company-web-html company-bootstrap company-css company-yasnippet company-files))) ;; 配置补全触发最小前缀,避免输入单字符就弹出补全干扰 (setq-local company-minimum-prefix-length 2) (setq-local company-bootstrap-modes '(web-mode)) ;; 识别class属性上下文自动触发bootstrap补全 (defun my/web-mode-bootstrap-trigger () (when (and (derived-mode-p 'web-mode) (looking-back "class=\"[^\"]*" (line-beginning-position))) (company-bootstrap))) ;; 缓冲区局部绑定触发钩子,避免影响其他模式 (add-hook 'company-completion-started-hook #'my/web-mode-bootstrap-trigger nil t)))
验证说明
重启Emacs后打开HTML文件即可自动生效:
- 输入HTML标签名时自动触发
company-web-html标签补全 - 输入
class="后输入字符,自动弹出Bootstrap类名补全,无需手动执行M-x company-bootstrap - 编写内联CSS时自动触发
company-css样式补全
如果配置后仍无响应,先检查
company-bootstrap、company-web包是否已从包源正确安装,启动时无相关包加载报错。
内容的提问来源于stack exchange,提问作者Michel Lecomte
相关产品推荐
相关产品推荐

