首页 文章

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

提问于
浏览
7

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

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

我真的想要应用“Indent with tabs, align with spaces”原则,但是当谈到自动缩进时,我没有教Vim如何做到这一点 .

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

>-- 表示制表符, . (点)表示空格):

{
>--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;
}

怎么做到这一点?

2 回答

  • 0

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

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

    因为这会返回空格的数量,而不是渲染的缩进本身,而Vim到目前为止只支持制表符,空格或最大数量的制表符后跟空格(称为softtabstop),这是不可能完成的 .

    所以,如果你真的想要使用这种缩进方法(我个人也喜欢它的纯度和优雅!(但我没有使用它)),你必须关闭自动缩进和自动格式化并执行不幸的是,你自己手动整个东西 .

  • 3

    正如您已经指出的那样,vim无法区分您是否按Tab键缩进,或者因为您尝试对齐文本,因此无法自动化您想要的行为 .

    你可以做的最接近的事情是尝试使用softtabstoptabstop的不同值,但是这样你得到了你所要求的相反:在使用标签之前按一个标签将插入尽可能多的空格 .

    另外,如果您希望代码始终如您所愿,可以尝试直接设置expandtab .

    空间总是看起来一样,所以

    {
    .........long a = 1,
    ..............b = 2,
    ..............c = 3;
    }
    

    是你的代码将永远出现的方式 .

相关问题