align-regexp未考虑字体?

写FP语言我喜欢把代码根据=对齐,

但代码里unicode太多,我不得不使用一个等宽字体,来得到很好的对齐效果。然而有的字体,比如我是用的Iosevka, 里面的→占用了两个字符,

↑ty : Fin (suc m) → Type m → Type (suc m)
↑ty k Int       = Int
↑ty k (‶ X)     = ‶ punchIn k X
↑ty k (A `→ B) = ↑ty k A `→ ↑ty k B
↑ty k (`∀ A)    = `∀ (↑ty (#S k) A)

上面的代码在我的代码里对齐:

但是由于大部分字体对待→是一个字符,所以我 align-regexp =得到的结果是

↑ty : Fin (suc m) → Type m → Type (suc m)
↑ty k Int      = Int
↑ty k (‶ X)    = ‶ punchIn k X
↑ty k (A `→ B) = ↑ty k A `→ ↑ty k B
↑ty k (`∀ A)   = `∀ (↑ty (#S k) A)

当然在大部分字体下,这个结果是符合预期的(比如本论坛的代码字体),但是受我使用的字体影响却不能很好对齐,

我能理解让它考虑到字体有点强人所难,不知道大家有没有什么workaround?

可以使用Iosevka的term或fixed版本

1 个赞

噢!才注意到有这两个variant,用上了🙏

这种方式会污染 diff 吧