whitespace-mode 当 tab 占用一个空格宽度时对不齐的问题怎么解决?

就是 Whitespace-mode tab mark disturb my indentation - Emacs Stack Exchange 里面提到的问题。

除了按照注释里说的,注释掉tab-mark那一行,还有更好的方法吗?

whitespace-mode 只是简单的将 ?\t[?» ?\t] 做了映射。也就是说,屏幕上的每个 \t 都被替换成 »\t 显示。因为 \t 宽度是动态的,所以只要原始占用宽度大等于 2 就没问题。

例如当 tab-width 为 4 的时候,以下字符串占用的宽度是相同的:

Original Whitespace mode
\t »\t
\s\t \s»\t
\s\s\t \s\s»\t

一旦 \t 原始占用宽度小于 2,必然放不下 »\t,自然而然后面这个 \t 就被推到下一个位置。

这可能要该底层的 c 代码,当原始占用宽度等于 1 的时候只插入»

我暂时没找到在哪里修改。

透露一下。

我最近正在写一个只作用于选区的 whitespace 扩展,类似 sublime text 那样的效果:

image

顺带解决了你提出的这个问题。

已初步完成。

3 个赞

哇!期待!:sweet_potato:

包名还没想好,苦恼。