VIM - "Pretty" C 中结构的列格式
VIM - "Pretty" column format of structs in C
我有一些包含很多 typedef
的 struct
的 C 代码,在 VIM:
中看起来像这样
typedef struct {
int a;
someValue* b;
someOtherValue* c;
} val_t;
当我通过 :set list
在 VIM 中启用 "print whitespace characters" 时,我看到代码显示如下(.
个字符表示空格,-->
表示硬标签):
typedef struct {
int->-->-->-->a;
someValue*....b;
someOtherValue*>>c;
} val_t;
因此,这段代码似乎到处都是硬制表符和空格的混合体,可能是因为使用不同的编辑器来维护它。我正在尝试编写一些命令来整理它。我知道我可以通过 SHIFT+V 进行视觉选择,然后通过以下方式将选择传送到 col
:
:'<:'>!col
然而,VIM 中的输出看起来很糟糕,因为它似乎 col
只是分隔列 "logically"(即:通过三个硬制表符),而不是词汇上的,输出如下所示:
typedef struct {
int--->--->--->a;
someValue*>--->--->b;
someOtherValue*--->--->--->c;
} val_t;
有没有办法告诉 col
使用固定宽度的硬制表符对齐数据列(即:每个制表符 4 "spaces"),如下所示,以便开头结构中的变量名称在视觉上对齐?期望的结果是:
typedef struct {
int--->--->--->--->a;
someValue*>--->--->b;
someOtherValue*--->c;
} val_t;
这将允许我在 per-block/per-struct 级别上重构一堆头文件,而不是花费数小时手动缩进代码块以使其看起来不错。
谢谢。
您是否卡在硬标签上?如果不是,您可能需要查看 tabular or vim-easy-align.
使用 tabular 你可以做这样的事情:
:?{?+,/}/-Tabularize/\ze\w\+;/
如需更多帮助,请参阅:
:h \ze
:h range
我有一些包含很多 typedef
的 struct
的 C 代码,在 VIM:
typedef struct {
int a;
someValue* b;
someOtherValue* c;
} val_t;
当我通过 :set list
在 VIM 中启用 "print whitespace characters" 时,我看到代码显示如下(.
个字符表示空格,-->
表示硬标签):
typedef struct {
int->-->-->-->a;
someValue*....b;
someOtherValue*>>c;
} val_t;
因此,这段代码似乎到处都是硬制表符和空格的混合体,可能是因为使用不同的编辑器来维护它。我正在尝试编写一些命令来整理它。我知道我可以通过 SHIFT+V 进行视觉选择,然后通过以下方式将选择传送到 col
:
:'<:'>!col
然而,VIM 中的输出看起来很糟糕,因为它似乎 col
只是分隔列 "logically"(即:通过三个硬制表符),而不是词汇上的,输出如下所示:
typedef struct {
int--->--->--->a;
someValue*>--->--->b;
someOtherValue*--->--->--->c;
} val_t;
有没有办法告诉 col
使用固定宽度的硬制表符对齐数据列(即:每个制表符 4 "spaces"),如下所示,以便开头结构中的变量名称在视觉上对齐?期望的结果是:
typedef struct {
int--->--->--->--->a;
someValue*>--->--->b;
someOtherValue*--->c;
} val_t;
这将允许我在 per-block/per-struct 级别上重构一堆头文件,而不是花费数小时手动缩进代码块以使其看起来不错。
谢谢。
您是否卡在硬标签上?如果不是,您可能需要查看 tabular or vim-easy-align.
使用 tabular 你可以做这样的事情:
:?{?+,/}/-Tabularize/\ze\w\+;/
如需更多帮助,请参阅:
:h \ze
:h range