Vim:缩进tab,与空格对齐
我已经阅读了几个问题和答案:
但他们都没有为我提供解决方案。
我真的想要应用“缩进与标签,对齐空格”的原则,但是当涉及到自动缩进时,我没有教Vim如何做到这一点。
考虑代码,假设tabstops == 3
, shiftwidth == 3
( >--
means tab,和.
(a dot)表示空格):
{
>--long a = 1,
>-->--..b = 2,
>-->--..c = 3;
}
因此,它尽可能多地缩进标签,然后用空格填充其余部分。 但实际上这是一个非常糟糕的做法:当有人用不同的制表符大小阅读这段代码时,代码就会混乱。 在这里它将看起来像标签大小等于8个字符:
{
>-------long a = 1,
>------->-------..b = 2,
>------->-------..c = 3;
}
这太可怕了。 问题在于Vim不区分缩进和对齐。
为了使它看起来正确无论标签大小是什么,代码应该这样缩进:
{
>--long a = 1,
>--.....b = 2,
>--.....c = 3;
}
然后,无论该标签大小如何,此代码都会很好看。 例如,8个字符:
{
>-------long a = 1,
>-------.....b = 2,
>-------.....c = 3;
}
如何实现这一目标?
影响Vim缩进的最有效方式是通过'indentexpr'
。 来自:help
:
表达式必须返回值的缩进数量。 它可以返回“-1”以保持当前缩进(这意味着'缩进'使用'autoindent')。
由于这会返回空格数量,而不是渲染的缩进本身,而Vim目前只支持制表符,空格或最大数量的空格键(称为softtabstop),所以无法完成。
所以,如果你真的想使用这种缩进方法(我个人喜欢它的纯度和优雅,(但我没有使用它)),你必须关闭自动缩进和自动格式化,并做不幸的是,你自己手动完成所有的事情
正如你已经指出的那样,vim无法区分你是否按Tab键缩进或是因为你想要对齐文本,所以不可能自动化你想要的行为。
你可以做的最接近的事情是尝试使用softtabstop和tabstop的不同值,但这样你就可以得到与你所要求的相反的结果:在使用选项卡之前按下一个选项卡将会插入尽可能多的空间。
另一方面,如果你想让你的代码看起来像你想的那样,你可以直接设置expandtab。
空间总是看起来一样,所以
{
.........long a = 1,
..............b = 2,
..............c = 3;
}
是你的代码总是会出现的方式。
链接地址: http://www.djcxy.com/p/28647.html