Ligature issues in VSCode Terminal
I think the font itself has no issue.
根据我的经验,这是terminal决定如何显示一个字符的策略,导致的问题。
目前业内的标准是unicode,terminal app会使用一些库来获取一个unicode char的长度。比如a-z 0-9这类ascii字符肯定是1的长度,中日韩文字肯定是2的长度。但是还有大量的“几乎是事实标准,被广泛使用的”,但没有正式进入unicode标准的字符,比如一些数学符号,emoji,unicode表格符号(横线、竖线之类),nerd fonts,这些也需要用unicode库来识别。
如果terminal app对一个unicode字符的长度识别错误,或者说,识别的标准太老(unicode标准也一直在变动),就会出现这类问题。
你这个issue里,上面vscode编辑器内部识别长度为 1,下面vscode terminal在渲染的时候是打算把这个字符 渲染成 2个长度的,但是不知什么原因,又强行显示成1个长度,且把右半边截断了。
具体看下我在这个issue下的一些测试:https://github.com/rsvim/rsvim/issues/534#issuecomment-3092424437
目前业内的最佳实践是google主导开发的 icu 库:https://github.com/unicode-org/icu4x
这个rust库里的 EastAsiaWidth api实现了这个标准:https://www.unicode.org/reports/tr11/ 主要就是来测试字符显示长度的。
制作字体的时候,建议遵守这个库里识别的长度。
@linrongbin16 感谢分享。但是issue中的标签连字完全由 ascii 字符组成,其他的类似连字如 [INFO] 虽然也会被遮挡,但是只会挡住一点。我在制作标签连字的时候对内部的字符的间距 (kerning) 进行了调整,推测和排除下来可能是这个原因
这样子