基于 Company 编写了一个带中文注释的英文补全助手

之前也有相关的讨论,见 spacemacs下英文写作有哪些技巧

对 company-mode 和 posframe 还不太熟,对不齐可能是因为

(string-width match) 这一行,对中文自动补了相应的 #xfeff(ZWNBSP,ZERO WIDTH NO-BREAK SPACE)。

默认这个字符显示为 thin-space,虽然很窄,还是可见的。

(char-table-range glyphless-char-display #xfeff) ;; => thin-space

可以设置为 zero-width,这样就显示正常了。

(set-char-table-range glyphless-char-display #xfeff 'zero-width)

但是 glyphless-char-display 这个变量是全局有效的,可能会影响其它应用。我试过用 make-local-variablemake-variable-buffer-local 设置好像都没有效果,不知道这个怎么设置。

当然也可以直接改函数 company--clean-stringpropertize 加个 invisible 属性或者用 string-compose 之类的(但我不知道这样改有什么后果):

-       (make-string (1- (string-width match)) ?\ufeff)
+       (propertize (make-string (1- (string-width match)) ?\ufeff) 'invisible t)
2 个赞