VIM - C语言中“结构”的“漂亮”列格式

时间:2015-07-20 18:26:20

标签: regex vim formatting indentation col

我有一些带有很多typedef'ed struct的C代码,在VIM中看起来像这样:

typedef struct {
  int         a;
  someValue*    b;
  someOtherValue* c;
} val_t;

当我通过:set list在VIM中启用“打印空白字符”时,我看到代码如此显示(.个字符表示空格,-->表示硬标签):< / p>

typedef struct {
  int->-->-->-->a;
  someValue*....b;
  someOtherValue*>>c;
} val_t;

因此,似乎这个代码在整个地方都混合了硬标签和空格,可能是由于使用了不同的编辑器来维护它。我正在尝试编写一些命令来整理它。我知道我可以通过 SHIFT + V 进行视觉选择,然后通过以下方式将选择传递给col

:'<:'>!col

然而,VIM中的输出看起来很糟糕,因为似乎col只是“逻辑地”分隔列(即:通过三个硬标签),而不是词法,输出看起来像这样: / p>

typedef struct {
  int--->--->--->a;
  someValue*>--->--->b;
  someOtherValue*--->--->--->c;
} val_t;

有没有办法告诉col使用固定宽度的硬标签(即每个标签:4个“空格”)对齐数据列,如下所示,以便变量名称的开头在结构内视觉对齐?期望的结果是:

typedef struct {
  int--->--->--->--->a;
  someValue*>--->--->b;
  someOtherValue*--->c;
} val_t;

这将允许我在每个块/每个结构级别上重新计算一堆头文件,而不是花费数小时手动缩进代码块看起来不错。

谢谢。

1 个答案:

答案 0 :(得分:2)

你是否坚持使用硬标签?如果不是,您可能需要查看tabularvim-easy-align

使用表格,您可以执行以下操作:

:?{?+,/}/-Tabularize/\ze\w\+;/

如需更多帮助,请参阅:

:h \ze
:h range