2012-04-23 35 views
3

一直未能找到一個基於Linux的SQL美化器來管我的mySQL片段,我會解決簡單製表mySQL的代碼。我希望把這個:使用vim的Tabularize插件只匹配第一次出現的分隔符

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 beautifier =)?

回答

4

爲了避免Tabularize重複你的模式來匹配其他領域,你必須 錨定它。在開始的時候,使在這種情況下更多的意義,所以你可以嘗試 是這樣的:

:Tab /^\s*\w* 

只有一個字段在你行這一模式。但要小心 - 在您的示例中, 可能不會發生,但這與絕大多數行匹配,因此最好將Tabularize僅應用於一個範圍(顯式地或者在可視模式下選擇 ) 。

+0

謝謝。雖然不是我的問題,但我把這個重新映射到我的.vimrc文件中,通過直觀地選擇行並輸入' mal'('M'ysql'AL'ign)'vnoremap mal:Tabularize/^ \ s * \ w */l ' – puk 2012-04-23 21:29:16

+0

就是這樣,@puk。對不起,我顯然錯過了2個空格填充。另外,如果你總是在縮進行上做這個,你可以使用'/^\ s \ + \ w \ +'這將減少不正確的猜測行數。然後,您可以應用它,而不用直觀地選擇第一個,並保存一些按鍵:-) – sidyll 2012-04-23 21:44:02

+0

感謝您的提示,但它不會爲mySQL創建表b/c的工作我想排列列,以及列(即。 'ID','GROUPNAME','ACTIVE'),但不適用於其他關鍵字,如'PRIMARY KEY'和'FOREIGN KEY' – puk 2012-04-23 22:01:29

相關問題