vim表格只在第一场比赛的线上?

时间:2012-07-16 02:50:52

标签: vim formatting format tabular

我正在尝试使用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 个答案:

答案 0 :(得分:21)

您可以使用此命令:

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

该模式仅匹配第一个=


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

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

下次,只需运行:

:Tabularize 1=

如果=周围不需要空格,请运行:

:Tabularize 1==

答案 1 :(得分:15)

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

:Tab /=.*/

这很好用 - 匹配第一个等号和后面的所有内容,左对齐(默认,效果很好!)。

答案 2 :(得分:5)

出色的插件:vim-easy-align

答案 3 :(得分:2)

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

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

使用此命令,如果您想根据第一个=进行对齐,那么您可以这样做:

:TabFirst =

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

:TabFirst {

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