将文本格式化为块(对齐第二列)

时间:2012-05-18 16:29:07

标签: vim text-formatting

很多时候,我的一些代码中都有一个初始化器列表,如下所示:

class Foo(object):
    def __init__(self, data):
        self.foo       = data.getFoo()
        self.bar       = data.getBar()
        self.something = data.getSomething()

正如您所看到的,我喜欢我的代码像表一样对齐。在很多情况下,上面的代码可以通过脚本编写Vim来生成,来自其他程序的输出(例如,数据库中的DESCRIBE "foo";)。不幸的是,脚本输出通常看起来像这样,首先:

class Foo(object):
    def __init__(self, data):
        self.foo = data.getFoo()
        self.bar = data.getBar()
        self.something = data.getSomething()

因此,在自动生成赋值语句之后,我必须手动对齐所有语句以获得所需的外观。

现在:有没有办法让vim自动对齐语句的“后半部分”?

3 个答案:

答案 0 :(得分:3)

tabular plugin就是这样做的。您可以看到它的实际效果(并了解如何使用它)here

更新:我将简要解释一下插件的使用情况,但没有任何解释会比Drew's video更好,所以我强烈建议所有人观看。

要使用该插件,只需致电:Tab /=,它将对齐文件中的所有等号。如果您想指定要对齐的行,只需为其指定范围:5,10Tab /=或使用可视模式(vV)选择所需的行,请按{{1}并插入Tabularize命令,您的命令行将如下所示::

:'<,'>Tab /=命令中的参数是正则表达式,这意味着您可以使用此命令对齐许多内容。您将仅受正则表达式知识的限制。

对不起任何英文错误:D

答案 1 :(得分:1)

已提及的 Tabular 插件的替代方案是值得尊敬的Align plugin

答案 2 :(得分:0)

一种天真的做法是首先在等号周围留出足够的空间:

:s/=/                         =/

然后,阻止选择(Ctrl-V),以便选择所有=个字符和后面的所有内容。 Yank(y),将其粘贴到其他地方。

接下来,取消缩贴粘贴的线条(10<通常就足够了),直到它们与最左边的位置对齐。然后,再次阻止选择并粘贴到它们被切断的位置。

虽然效果很好,但感觉就像很多工作一样。