为何makefile模式下无法对我前文输入过的字符串进行补全呢?
其他模式下都可以的,请问如何查找这个问题?或者如何设置?
为何makefile模式下无法对我前文输入过的字符串进行补全呢?
其他模式下都可以的,请问如何查找这个问题?或者如何设置?
补全关键字 (k
)、Snippet (S
)、代码中的单词 (w
) 和非代码中的单词 (w
)。
如果觉得噪音太大可以把第三行注释去掉:
(defun makefile-mode-setup ()
(setq-local company-dabbrev-ignore-case t)
;; (setq-local company-dabbrev-other-buffers nil)
(setq-local company-dabbrev-code-ignore-case t)
(setq-local company-backends '((company-dabbrev-code
company-keywords
company-yasnippet
company-dabbrev
:separate)))
(setf (alist-get major-mode company-keywords-alist)
(-uniq
(append makefile-statements
makefile-special-targets-list
(->> (pcase major-mode
('makefile-automake-mode makefile-automake-statements)
('makefile-gmake-mode makefile-gmake-statements)
('makefile-makepp-mode makefile-makepp-statements)
('makefile-bsdmake-mode makefile-bsdmake-statements)
('makefile-imake-mode makefile-imake-s))
(-filter #'stringp)
(-map #'split-string)
(-flatten))))))
(with-eval-after-load 'company
(require 'make-mode)
(dolist (hook '(makefile-gmake-mode-hook
makefile-makepp-mode-hook
makefile-bsdmake-mode-hook
makefile-imake-mode-hook))
(add-hook hook #'makefile-mode-setup)))
|
|
感谢答复!我马上试试
确实可用,谢谢!
(require 'make-mode)
这行应该可以去掉,你试试。
这个 keywords 我感觉可以扔到 company-mode 上游去,毕竟 Makefile 也算是一个比较常用的格式
我打算先提个 pr 让 company-keywords
支持 ignore case。
keywords 已经合并到 compay-mode
了,也加了 company-dabbrev-ignore-case
开关允许用小写补全大写关键字。
但是 company-backends
还是要自行设置,否则会因为受干扰而无法发挥作用。
(defun makefile-mode-setup ()
(setq-local company-keywords-ignore-case t)
;; (setq-local company-dabbrev-other-buffers nil) ;; 如觉干扰太大开启这行
(setq-local company-dabbrev-ignore-case t)
(setq-local company-dabbrev-code-ignore-case t)
(setq-local company-backends '((company-dabbrev-code
company-keywords
company-yasnippet
company-dabbrev :separate))))
(with-eval-after-load 'company
(add-hook 'makefile-mode-hook #'makefile-mode-setup))
另,国内的几个 elpa 镜像好像又停更几天了,我现在换 Boris / elpa-mirror · GitLab 。