Vim:源代码格式化

时间:2010-11-10 08:03:36

标签: 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,
    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;
}

由于

3 个答案:

答案 0 :(得分:11)

你可以从两个可以做这件事的插件中收获:

答案 1 :(得分:3)

Align.vim插件可能是要走的路,但如果您希望在标准安装上使用它,您可以随时通过awk过滤以获得一些通用功能而不是太多多工作

对于TestEnum,您可以执行类似

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

在视觉上选择了支撑内容后(这里viB非常棒。)

对于Foo,你会做

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

您可以使用awk for-loop使其变宽,但代价是在此处轻松快速地输入版本。

如果您使用unix实用程序col,则可以尝试

'<,'>!col -x

但是这里你的里程确实会有所不同,因为这不是公用事业的预期用途。

答案 2 :(得分:0)

对齐或表格式的声音就像要走的路一样,但我还要提到Unix实用程序column,这非常漂亮,人们应该知道更多。
显然是Unix特有的。 (在openSuSE 12.3上,它在util-linux软件包中;在其他发行版上可能有所不同。)
要在vim中调用它,请在视觉上选择要对齐的行,然后选择
:!column -t
因此,当您使用选定的行点击:时,vim会为您填充视觉范围,您会得到:
 :'<,'>!column -t
(默认情况下,它在空格上分隔,但您可以使用-s <separator>选项进行更改。)
它使对齐的事情使得每列对于其最长的成员来说足够长。