对齐Tabular.vim中的两种模式之一

时间:2019-03-05 01:40:21

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

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

  • 前3行'<,'> Tab /^\s*\w*/l31
  • 接下来的两行'<,'> Tab /REFERENCES/l15c1
  • 最后两行'<,'> Tab /CHECK/l12c1

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

1 个答案:

答案 0 :(得分:1)

您需要转义模式分支(|-> \|)或使用\v来达到神奇的效果。

这适用于您的示例:

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

有关逃逸的更多信息,请参见:h /magic