我正在尝试使用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 /=
似乎与一切相符,一切都变得疯狂。
非常感谢!
答案 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的智能选择。