我有一些带有很多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;
这将允许我在每个块/每个结构级别上重新计算一堆头文件,而不是花费数小时手动缩进代码块看起来不错。
谢谢。
答案 0 :(得分:2)
你是否坚持使用硬标签?如果不是,您可能需要查看tabular或vim-easy-align。
使用表格,您可以执行以下操作:
:?{?+,/}/-Tabularize/\ze\w\+;/
如需更多帮助,请参阅:
:h \ze
:h range