16

我正在尝试使用 tabular.vim 插件格式化一些 python 代码。它目前是一个 sqlalchemy 声明类,看起来像这样:

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

我希望能够仅对齐列表中的第一个等号。

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

只是一个普通的

: Tabularize /=

似乎匹配一切,一切都变得疯狂。

首先十分感谢!

4

4 回答 4

25

你可以使用这个命令:

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

该模式只匹配第一个=


您可以将这两行添加到~/.vim/after/plugin/TabularMaps.vim

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

下次,只需运行:

:Tabularize 1=

如果您不需要空格=,请运行以下命令:

:Tabularize 1==

于 2012-07-16T04:03:00.710 回答
20

上面的建议很好,但在这种情况下,它们有点太复杂了,需要输入太多。怎么样:

:Tab /=.*/

这很好用——匹配第一个等号和它后面的所有东西,左对齐(默认,很好用!)。

于 2014-05-24T01:23:57.963 回答
7

出色的插件:vim-easy-align

于 2014-05-23T14:06:55.117 回答
2

根据这个答案,您可以通过设置如下 vim 命令动态地执行此操作,而不是为每种情况创建静态映射:

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

使用此命令,如果您想基于第一个对齐,=那么您可以执行以下操作:

:TabFirst =

或者,如果你想对齐第一个{,你可以这样做:

:TabFirst {

这支持范围选择以及 Tabularize 的智能选择。

于 2013-12-11T22:23:47.503 回答