是否可以使 vim 显示具有不同缩进量的前导空格?

Is it possible to make vim display leading spaces with a different amount of indentation?

It appears,令人惊讶的是,更多自主选择的 SO 开发者更喜欢通过制表符而不是空格缩进。有些人提出可以使用制表符缩进和空格对齐的论点。理论上这听起来很酷,但在实践中我怀疑这比任何事情都更痛苦,因为你看不到你拥有哪个角色(除非你喜欢打开那种东西)。

所以我有了一个想法——为什么编辑们不呢?为什么编辑器不应该让您配置要用于缩进的空格数,但 这些空格的外观。即:

正常:

class MyClass:
____def myfun():
________somevariable = 42
________volts        = 40000000 # If you're into that sort of thing. 
________________________________# Not well-formatted Python, though.

前导缩进设置为显示为 2 个空格:

class MyClass:
__def myfun():
____somevariable = 42
____volts        = 400000000

是否可以用 vim 做这样的事情?我知道写一个 post-open/pre-save 命令来替换内容是完全可能的,它可能工作相同......但我更好奇是否有可能,在 vim 中,使其成为 看起来好像前导空格比实际少(或多)?

是的,你可以,使用隐藏功能。演示(使用示例文本中的标记和不同的替换字符而不是空格来实现效果):

:syntax match Indent "\%(^\%(__\)*\)\@<=__" conceal cchar=#
:set conceallevel=2 concealcursor=nvic

该模式匹配行首的每一对 __,并用单个 # 替换(隐藏)每个 #,有效减少可见缩进。

作为一个纯粹的视觉功能,我觉得它不是很有用,我更喜欢你似乎喜欢的post-打开/预保存解决方案请注意。