之前也有相关的讨论,见 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)