C++ Vim:源代码格式化

C++ Vim:源代码格式化,c++,formatting,vim,C++,Formatting,Vim,请看一下枚举: enum TestEnum { First = 1, Second = 2, Unknown = 3, TestTestTest = 100, Zero = 0, Foo = 123, } 如何使用Vim的全部功能来重新格式化它 enum TestEnum { First = 1, Second = 2, Unknown = 3, TestTes

请看一下枚举:

enum TestEnum
{
    First = 1,
    Second = 2,
    Unknown = 3,
    TestTestTest = 100,
    Zero = 0,
    Foo = 123,
}
如何使用Vim的全部功能来重新格式化它

enum TestEnum
{
    First           = 1,
    Second          = 2,
    Unknown         = 3,
    TestTestTest    = 100,
    Zero            = 0,
    Foo             = 123,
}
就我个人而言,我正在一行一行地移动和切换。这和我在任何一个普通编辑器中所做的一样。如何以正确的方式做到这一点

班级成员也一样:

class Foo
{
    SuperFoo foo1;
    RegularFoo foo2;
    SuperiorFoo foo3;
    YetAnotherFoo foo4;
    Bar bar;
}
差不多

class Foo
{
    SuperFoo        foo1;
    RegularFoo      foo2;
    SuperiorFoo     foo3;
    YetAnotherFoo   foo4;
    Bar             bar;
}

谢谢

您可以使用两个插件来完成这项工作:

  • ,或

    • Align.vim插件可能是一个不错的选择,但是如果您希望在标准安装中方便地使用它,您可以通过awk进行过滤,以获得一些通用功能,而不需要做太多工作

      对于TestEnum,您将执行以下操作

      '<,'>!awk '{printf "^I\%-20s\%-20s\%-20s\n", $1, $2, $3}'
      

      但在这里,您的里程数确实会有所不同,因为这不是该实用程序的预期用途。

      对齐或表格听起来很不错,但我还将提到Unix实用程序
      列,它非常漂亮,应该有更多的人知道。
      显然是Unix特有的。(在openSuSE 12.3上,它位于util linux包中;在其他发行版上可能不同。)
      要在vim中调用它,请目视选择要对齐的行,然后
      :!列-t

      因此,当您在选中行的情况下点击
      时,vim为您填充的可视范围将显示:

      :”+1。有趣的问题。然而,它似乎相当具体。它可能可以使用脚本来完成,但我高度怀疑是否有用于此类事情的本机命令。是的,确实如此。在那里使用原生点魔法或类似的东西会很好。之所以有插件这样做,是因为没有原生命令,至少没有比
      :Align=
      更简单的命令。虽然这种格式可能很好,但当你需要创建diff并添加新的长选项时,它会很糟糕。在这种情况下,您将不得不更新许多行,这将创建一个相当难看的差异,并且您不必撤销和重复很多次,以获得awk中的正确列宽;您可以使用可视块模式(ctrl-v)稍微删减一点,假设您估计过高。
      '<,'>!awk '{printf "^I\%-20s\%-20s\n", $1, $2}'
      
      '<,'>!col -x