如何配置才能使dabbrev补全后端只补英文而不补中文?

中文也补全有点烦,

已经试过的代码如下。

求高手指点该怎么改?

;; 限定数字和字母

;; try-1
;; (setq dabbrev-abbrev-char-regexp "[A-z0-9:-]")
;; (setq dabbrev-abbrev-char-regexp "[-_A-Za-z0-9]")
;; (setq dabbrev-abbrev-char-regexp "\\sw\\|[.]")
;; (setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_")

;; try-2
;; (push (apply-partially #'cl-remove-if
;;                        (lambda (c) (string-match-p "\\`[0-9]+\\'" c)))
;;       company-transformers)

;; try-3
;; (setq dabbrev-abbrev-skip-leading-regexp "[^\x00-\x7F]")
;; (setq dabbrev-abbrev-skip-leading-regexp "[^[:ascii:]]")
;; (setq dabbrev-abbrev-skip-leading-regexp "[^\x20-\x7E]")
(setq dabbrev-abbrev-skip-leading-regexp "[^\w \xC0-\xFF]")

github上得到了company-mode作者的回答。供后人参考。

It's company-dabbrev-char-regexp, not -abbrev-.

最近在 Corfu + Cape 使用 cape-dabbrev 时也遇到这个问题,因为中文没有分词,补全中文确实没什么意义。

经过 Tg 群的 @Voleking 大佬指点,用下面的设置就可以只补全英文。希望对使用 Corfu 的朋友有帮助。

(use-package dabbrev
  :custom (dabbrev-abbrev-char-regexp "[A-Za-z-_]"))

PS:cape-dabbrev 会出现补全候选丢失,有的词补全不到的情况。但是用 hippie-expand 来触发就不会,索性不用 dabbrev 的自动补全了,直接通过 hippie-exp 手动补全,按需触发。

(use-package hippie-exp
  :bind ([remap dabbrev-expand] . hippie-expand)
  :custom
  (hippie-expand-try-functions-list
   '(try-complete-file-name-partially
     try-complete-file-name
     try-expand-dabbrev
     try-expand-dabbrev-all-buffers
     try-expand-dabbrev-from-kill)))
1 个赞