vim - 在 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)
);
我可以通过发出这些命令来独立转换它们
- 前 3 行
'<,'> Tab /^\s*\w*/l31
- 接下来两行
'<,'> Tab /REFERENCES/l15c1
- 最后两行
'<,'> Tab /CHECK/l12c1
这有两个缺点,它需要三个动作,我必须手动计算间距。有没有办法一次搜索所有三种模式,比如'<,'> Tab /^\s*\w*|REFERENCES|CHECK
?
解决方案
您需要转义您的模式分支 ( |
-> \|
) 或使用\v
非常神奇的方法。
这适用于您的示例:
:Tabularize /^\s*\%(CONSTRAINT\s\+\w\+\|FOREIGN KEY.*)\|\l\w\+\)\zs.*/
:h /magic
有关转义的更多信息,请参阅
推荐阅读
- git - 如何优化 2000GB Git 数据
- java - Firebase 数据库中的 setValue() 方法不起作用。值未添加到数据库中
- ssl - Kafka,通过 OpenSSL 的自签名证书验证主机名
- mysql - 如何按日期而不是时间分组
- stm32 - 我无法通过 STM32F103 上的 mpu6050 使用 I2C 获取数据
- react-native - React Native Expo 水平和垂直滚动 - Android 和 iOS
- angular - 无限循环发生效果 - Angular ngrx8
- sql - 我在 Excel 表中有电子邮件列表。从包含 Excel 文件中相同电子邮件的数据库中搜索记录的最简单方法是什么?
- reactjs - 变量超出范围反应
- react-native - 无法安装反应导航