如何对齐代码的参数列



假设我有几十行代码,如下所示:

callbacks.registerFunction("position", bind(MovementControllerCallbacks::position, movementController, _1));
callbacks.registerFunction("setPosition", bind(MovementControllerCallbacks::setPosition, movementController, _1));
callbacks.registerFunction("translate", bind(MovementControllerCallbacks::translate, movementController, _1));
callbacks.registerFunction("positionDelta", bind(MovementControllerCallbacks::positionDelta, movementController, _1));
callbacks.registerFunction("measuredVelocity", bind(MovementControllerCallbacks::measuredVelocity, movementController, _1));
callbacks.registerFunction("velocity", bind(MovementControllerCallbacks::velocity, movementController, _1));
callbacks.registerFunction("setVelocity", bind(MovementControllerCallbacks::setVelocity, movementController, _1));
callbacks.registerFunction("setXVelocity", bind(MovementControllerCallbacks::setXVelocity, movementController, _1));
callbacks.registerFunction("setYVelocity", bind(MovementControllerCallbacks::setYVelocity, movementController, _1));
callbacks.registerFunction("applyForce", bind(MovementControllerCallbacks::applyForce, movementController, _1));
callbacks.registerFunction("control", bind(MovementControllerCallbacks::control, movementController, _1));
callbacks.registerFunction("xControl", bind(MovementControllerCallbacks::xControl, movementController, _1));
callbacks.registerFunction("yControl", bind(MovementControllerCallbacks::yControl, movementController, _1));
callbacks.registerFunction("inLiquid", bind(MovementControllerCallbacks::inLiquid, movementController, _1));
callbacks.registerFunction("onGround", bind(MovementControllerCallbacks::onGround, movementController, _1));
callbacks.registerFunction("collisionBounds", bind(MovementControllerCallbacks::collisionBounds, movementController, _1));

我希望它们看起来像:

callbacks.registerFunction("position",         bind(MovementControllerCallbacks::position,         movementController, _1));
callbacks.registerFunction("setPosition",      bind(MovementControllerCallbacks::setPosition,      movementController, _1));
callbacks.registerFunction("translate",        bind(MovementControllerCallbacks::translate,        movementController, _1));
callbacks.registerFunction("positionDelta",    bind(MovementControllerCallbacks::positionDelta,    movementController, _1));
callbacks.registerFunction("measuredVelocity", bind(MovementControllerCallbacks::measuredVelocity, movementController, _1));
callbacks.registerFunction("velocity",         bind(MovementControllerCallbacks::velocity,         movementController, _1));
callbacks.registerFunction("setVelocity",      bind(MovementControllerCallbacks::setVelocity,      movementController, _1));
callbacks.registerFunction("setXVelocity",     bind(MovementControllerCallbacks::setXVelocity,     movementController, _1));
callbacks.registerFunction("setYVelocity",     bind(MovementControllerCallbacks::setYVelocity,     movementController, _1));
callbacks.registerFunction("applyForce",       bind(MovementControllerCallbacks::applyForce,       movementController, _1));
callbacks.registerFunction("control",          bind(MovementControllerCallbacks::control,          movementController, _1));
callbacks.registerFunction("xControl",         bind(MovementControllerCallbacks::xControl,         movementController, _1));
callbacks.registerFunction("yControl",         bind(MovementControllerCallbacks::yControl,         movementController, _1));
callbacks.registerFunction("inLiquid",         bind(MovementControllerCallbacks::inLiquid,         movementController, _1));
callbacks.registerFunction("onGround",         bind(MovementControllerCallbacks::onGround,         movementController, _1));
callbacks.registerFunction("collisionBounds",  bind(MovementControllerCallbacks::collisionBounds,  movementController, _1));

这些块由换行符偏移,因此您可以使用{和}在它们之间导航。

我想做一个宏或函数或其他东西来做这个。但是我感觉我的vim工具箱中缺少了一些重要的工具,因为我不知道如何开始处理这个问题。

例如,我不知道如何根据特定标记的列插入可变数量的空格,我假设解决方案涉及。

我知道用手动的视觉块选择很容易。但是我有很多代码要格式化,我希望避免不得不诉诸于手动解决方案。

你应该看看插件列表

对于文本的第一行,您可以使用以下命令:

:%Tabularize /,

得到如下输出:

callbacks.registerFunction("position"         , bind(MovementControllerCallbacks::position         , movementController , _1));
callbacks.registerFunction("setPosition"      , bind(MovementControllerCallbacks::setPosition      , movementController , _1));
callbacks.registerFunction("translate"        , bind(MovementControllerCallbacks::translate        , movementController , _1));
callbacks.registerFunction("positionDelta"    , bind(MovementControllerCallbacks::positionDelta    , movementController , _1));
callbacks.registerFunction("measuredVelocity" , bind(MovementControllerCallbacks::measuredVelocity , movementController , _1));

我不知道是否可以在空格前加逗号。也许你可以通过详细查看这个插件来找到一些东西(否则,一个简单的替换就可以了)。

Edit: % in命令似乎是无用的。同样,使用空格作为分隔符,您将得到更接近您所寻找的输出:

:Tabularize / /
输出:

callbacks.registerFunction("position",           bind(MovementControllerCallbacks::position,           movementController,   _1));
callbacks.registerFunction("setPosition",        bind(MovementControllerCallbacks::setPosition,        movementController,   _1));
callbacks.registerFunction("translate",          bind(MovementControllerCallbacks::translate,          movementController,   _1));
callbacks.registerFunction("positionDelta",      bind(MovementControllerCallbacks::positionDelta,      movementController,   _1));
callbacks.registerFunction("measuredVelocity",   bind(MovementControllerCallbacks::measuredVelocity,   movementController,   _1));

最新更新