vim tabular only on the first match on the line?

后端 未结 4 948
忘了有多久
忘了有多久 2020-12-31 06:32

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     =           


        
相关标签:
4条回答
  • 2020-12-31 06:56

    Excellent plugin to do it: vim-easy-align.

    0 讨论(0)
  • 2020-12-31 06:57

    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==
    

    0 讨论(0)
  • 2020-12-31 07:07

    The suggestions above are good, but in this case they are a little too complicated and require too much typing. How about:

    :Tab /=.*/
    

    This works just fine -- match the first equal sign and everything after it, aligned left (default, which works just fine!).

    0 讨论(0)
  • 2020-12-31 07:19

    As per this answer, instead of creating a static mapping for each case, you can do this dynamically by setting up a vim command like this:

    command! -nargs=1 -range TabFirst exec <line1> . ',' . <line2> . 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
    

    With this command, if you wanted to align based on the first = then you could do:

    :TabFirst =
    

    Or, if you wanted to align on the first { you could do:

    :TabFirst {
    

    This supports range selections as well as Tabularize's smart selection.

    0 讨论(0)
提交回复
热议问题