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)
怎么做到这一点?
在 Vim 中影响缩进的最有效方法是通过'indentexpr'。来自其:help:
该表达式必须返回缩进的空格数。它可以返回“-1”以保持当前缩进(这意味着“自动缩进”用于缩进)。
由于这返回空格数,而不是呈现的缩进本身,并且 Vim 到目前为止仅支持制表符、空格或制表符后跟空格的最大数量(称为 softtabstop),因此无法执行此操作。
所以,如果你真的想使用这种缩进方法(我个人也喜欢它的纯粹和优雅!(但我不使用它)),你必须关闭自动缩进和自动格式设置并执行不幸的是,所有的事情都是你自己手动完成的。