Vim:缩进tab,与空格对齐

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

  • Vim:使用缩进标签,用于与C源文件对齐的空格
  • Vim:将连续线与空间对齐
  • 但他们都没有为我提供解决方案。

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

    考虑代码,假设tabstops == 3shiftwidth == 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

    上一篇: Vim: Indent with tabs, align with spaces

    下一篇: Smart indentation on closing curly braces