使用 vim 的 Tabularize 插件只匹配分隔符的第一次出现


Use vim's Tabularize plugin to only match the first occurance of a delimiter

由于无法找到基于Linux的SQL美化器来管道我的mySQL片段,我将满足于简单地将我的mySQL代码制成表格。我想把这个转过来:

CREATE TABLE IF NOT EXISTS GROUP
(
   ID INT NOT NULL AUTO_INCREMENT,
   GROUPNAME VARCHAR(15) UNIQUE,
   ACTIVE BOOLEAN DEFAULT TRUE,
   PRIMARY KEY(ID)
)ENGINE=InnoDB

进入这个

CREATE TABLE IF NOT EXISTS GROUP
(
   ID         INT NOT NULL AUTO_INCREMENT,
   GROUPNAME  VARCHAR(15) UNIQUE,
   ACTIVE     BOOLEAN DEFAULT TRUE,
   PRIMARY KEY(ID)
)ENGINE=InnoDB

但如果我这样做:Tabularize /'我会得到

CREATE TABLE IF NOT EXISTS GROUP
(
        ID          INT           NOT        NULL         AUTO_INCREMENT,
        USERID      INT           NOT        NULL,
        GROUPNAME   VARCHAR(15)   UNIQUE,
        ACTIVE      BOOLEAN       DEFAULT    TRUE,
        PRIMARY     KEY(ID),
        FOREIGN     KEY           (USERID)   REFERENCES   USER(ID)
)ENGINE=InnoDB

如何仅在标识符后的第一个空格上对齐(或者,在哪里可以找到命令行SQL美化器= )?

为了避免表格化重复您的模式以匹配其他字段,您必须锚定它。 在这种情况下,一开始更有意义,所以你可以试试像这样:

:Tab /^'s*'w*

您的行中只有一个具有此模式的字段。但要小心——它在您的示例中可能不会发生,但这与绝大多数行匹配,因此,仅在某个范围内应用表格化可能是一个好主意(要么显式或通过在可视模式下选择线条)。

为了更深入地了解已经给出的答案,另一种方法是将行的其余部分包含在匹配的分隔符中:

:Tab /'d.*

这将对齐从第一个数字开始的所有内容,无论后面有多少数字,也无论之前出现什么。根据具体情况,这可能是比指定定位点更好的选择。