之前也有相关的讨论,见 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-variable 和 make-variable-buffer-local 设置好像都没有效果,不知道这个怎么设置。
当然也可以直接改函数 company--clean-string 用 propertize 加个 invisible 属性或者用 string-compose 之类的(但我不知道这样改有什么后果):
- (make-string (1- (string-width match)) ?\ufeff)
+ (propertize (make-string (1- (string-width match)) ?\ufeff) 'invisible t)