首页 > 解决方案 > 在 Tabular.vim 中的两个模式之一上对齐

问题描述

我正在尝试美化我的 Postgres SQL 语句,以便:

 CREATE TABLE foo (
     id bigserial primary key,
     fid_1 bigserial primary key,      
     fid_2 bigserial primary key,      
     FOREIGN KEY (fid_1) REFERENCES fee,
     FOREIGN KEY (fid_1) REFERENCES fum,
     CONSTRAINT valid_fid_1 CHECK(fid_1 > 9000),
     CONSTRAINT valid_fid_2 CHECK(fid_2 > 9000)
 );

进入这个

 CREATE TABLE foo (
     id                                bigserial primary key,
     fid_1                             bigserial primary key,
     fid_2                             bigserial primary key,
     FOREIGN KEY (fid_1)               REFERENCES fee,
     FOREIGN KEY (fid_1)               REFERENCES fum,
     CONSTRAINT valid_fid_1            CHECK(fid_1 > 9000),
     CONSTRAINT valid_fid_2            CHECK(fid_2 > 9000)
 );

我可以通过发出这些命令来独立转换它们

这有两个缺点,它需要三个动作,我必须手动计算间距。有没有办法一次搜索所有三种模式,比如'<,'> Tab /^\s*\w*|REFERENCES|CHECK

标签: vim

解决方案


您需要转义您的模式分支 ( |-> \|) 或使用\v非常神奇的方法。

这适用于您的示例:

:Tabularize /^\s*\%(CONSTRAINT\s\+\w\+\|FOREIGN KEY.*)\|\l\w\+\)\zs.*/

:h /magic有关转义的更多信息,请参阅


推荐阅读