【问题标题】:Vim: Use tabs for indentation, spaces for alignment with C source filesVim:使用制表符缩进,空格与 C 源文件对齐
【发布时间】:2011-12-13 17:45:35
【问题描述】:

是否有人将她的 vim 设置为使用硬制表符作为缩进字符,但使用空格进行对齐?我遇到的问题是,当开始像中这样的延续线时

if (condition1 && (anotherlongcondition || /* <-- Here I insert a newline */
|-------|-------   whatever  /* some additional alignment added automatically */

,然后cin(这对我来说是必须的)以我喜欢位置的方式添加一些对齐方式,但是这种对齐方式是使用尽可能多的硬制表符创建的,其余部分填充空间(正如我试图想象的那样)。

所以,简而言之,cin 似乎并不能真正区分 缩进对齐。我真的很喜欢上面示例中所有添加的对齐方式都是空格。这样,在临时切换ts 时,对齐将被正确保留。

为了再清楚一点,我希望能够编写以下代码,永远不要在任何行的第一个非空白字符前面按 &lt;TAB&gt;&lt;SPACE&gt;(并且不进行任何手动移位或其他):

void foo(int bar)
{
|-------somestatement;
|-------if (somecondition && (someothercondition ||
|-------                      whatevercomesnext))
|-------|-------dosomething;
}

我已经尝试过ctab.vim,但它侧重于编辑带有软标签的对齐线,这对我来说似乎很愚蠢,因为手动对齐是一项提供一步细化的任务,而不是制表宽度步细化。我没有改变cin 使用混合制表符和空格进行对齐的方式。

我还没有找到任何内置的方法来实现这一点。也许还有一个?无论如何,我怀疑是否有一个插件可以做到这一点。虽然我承认自己不会 vim-script 并且可能没有足够的经验,但我必须说我尝试过的大多数插件只是搞砸了我的编辑器配置......

【问题讨论】:

  • 我自己使用的是ctab.vim(2.6 版),它似乎确实可以实现您想要实现的目标,即在输入上面的代码片段时,我不必输入任何内容制表符或空格字符使其格式正确。

标签: vim alignment indentation auto-indent


【解决方案1】:

除了您的 :set cino=(1,如果您还没有遇到过 'preserveindent' 和 'copyindent' 选项,您可能还会感兴趣。它们并不能完全解决您的问题,但确实可以采取一些方法来提供帮助。

【讨论】:

  • 是的,我遇到过他们。但是很遗憾,还有这么多规则都计算缩进和带有混合制表符/空格的缩进......
【解决方案2】:

好的,抱歉这个问题。我终于找到了一些很好的材料。

http://vim.1045645.n5.nabble.com/Indent-with-tabs-align-with-spaces-td1183279.html

综上所述,目前 vim 不够灵活,无法轻松完成。

我目前的解决方法是使用:set cinoptions=(1,它在开始续行时只添加一个对齐单元。这样,我可以确定添加的对齐是一个空格(只要我没有:set ts=1,至少)并手动添加大量的空格。就速度而言,这仍然可以,而且似乎对我来说是最不分散注意力的行为!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 2013-04-18
    • 1970-01-01
    • 2010-09-10
    • 2013-03-21
    • 1970-01-01
    • 2017-02-11
    • 2020-11-22
    相关资源
    最近更新 更多