Vim:缩进标签,与空格对齐

Dmi*_*ank 7 vim indentation alignment auto-indent

我已经阅读了几个问题和答案:

但它们都没有为我提供解决方案.

我真的想要应用" 缩进标签,与空格对齐 "的原则,但是当谈到自动缩进时,我没有教Vim如何做到这一点.

考虑代码,假设tabstops == 3,shiftwidth == 3

(>--表示标签,.(点)表示空格):

{
>--long a = 1,
>-->--..b = 2,
>-->--..c = 3;
}
Run Code Online (Sandbox Code Playgroud)

因此,它尽可能地缩进标签,然后用空格填充其余部分.但实际上这是一种非常糟糕的方法:当有人将使用不同的标签大小读取此代码时,代码将被搞砸.这里的标签大小等于8个字符的样子:

{
>-------long a = 1,
>------->-------..b = 2,
>------->-------..c = 3;
}
Run Code Online (Sandbox Code Playgroud)

太可怕了.问题是Vim没有区分缩进和对齐.

为了使其与标签大小无关,它应该以这种方式缩进代码:

{
>--long a = 1,
>--.....b = 2,
>--.....c = 3;
}
Run Code Online (Sandbox Code Playgroud)

然后,无论选项卡大小如何,此代码看起来都会很好.例如,8个字符:

{
>-------long a = 1,
>-------.....b = 2,
>-------.....c = 3;
}
Run Code Online (Sandbox Code Playgroud)

怎么做到这一点?

Ing*_*kat 4

在 Vim 中影响缩进的最有效方法是通过'indentexpr'。来自其:help

该表达式必须返回缩进的空格数。它可以返回“-1”以保持当前缩进(这意味着“自动缩进”用于缩进)。

由于这返回空格,而不是呈现的缩进本身,并且 Vim 到目前为止仅支持制表符、空格或制表符后跟空格的最大数量(称为 softtabstop),因此无法执行此操作。

所以,如果你真的想使用这种缩进方法(我个人也喜欢它的纯粹和优雅!(但我不使用它)),你必须关闭自动缩进和自动格式设置并执行不幸的是,所有的事情都是你自己手动完成的。