Search code examples
vimformattingformattabular

vim tabular only on the first match on the line?


I'm trying to format some python code with the tabular.vim plugin. It's currently a sqlalchemy declarative class, and looks something like this:

id     =  db.Column(db.Integer, primary_key=True)
status    =  db.Column(db.Integer, nullable=False, default=3)
...etc...

I'd like to be able to align only the very first equals sign in the list.

id     =  db.Column(db.Integer, primary_key=True)
status =  db.Column(db.Integer, nullable=False, default=3)
...etc...

Just a regular

: Tabularize /=

seems to match everything, and everything goes crazy.

Thanks very much in advance!


Solution

  • You can use this command:

    :Tabularize /^[^=]*\zs=
    

    The pattern only matches the first =.


    You can add these two line to ~/.vim/after/plugin/TabularMaps.vim

    AddTabularPattern 1=    /^[^=]*\zs=
    AddTabularPattern 1==   /^[^=]*\zs=/r0c0l0
    

    Next time, simply run:

    :Tabularize 1=
    

    If you don't need spaces around =, run this:

    :Tabularize 1==