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

Posted

技术标签:

【中文标题】将文本格式化为块(对齐第二列)【英文标题】:Format text as blocks (aligning second column) 【发布时间】:2012-05-18 16:29:06 【问题描述】:

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

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 自动对齐语句的“后半部分”?

【问题讨论】:

您能否更清楚地解释一下您是如何获得此输出的?与:r something? 我找到了一个声称可以执行此操作的 vim 脚本,但我不想将其发布为答案,因为我实际上并没有使用它:vim.org/scripts/script.php?script_id=294。另请参阅此 SO 问题:***.com/questions/8964953/… @romainl - 源可以是任何东西,从粘贴/处理的 SQL 到文件列表,再到任何东西.. 可以通过做一些 :r! ... 或任何东西来读取,真的。 【参考方案1】:

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

更新:我会简单解释一下插件的使用,但没有解释会比Drew's video更好,所以我强烈建议大家观看。

要使用该插件,只需调用:Tab /=,它将对齐文件中的所有等号。如果要指定要对齐的行,只需给它一个范围 :5,10Tab /= 或使用可视模式(vV)选择所需的行,按 : 并插入 Tabularize 命令,您的命令行将如下所示::'<,'>Tab /=

Tabcommand 中的参数是一个正则表达式,这意味着你可以使用这个命令来对齐很多东西。您只会受到您的正则表达式知识的限制。

抱歉有任何英文错误:D

【讨论】:

完美,我希望我会在需要时记住它...为了使答案更好,您可以在示例中解释如何使用它(如:Tab /=)。 @mliebelt 我添加了一个快速解释。但正如我所说,我给出的任何解释都不会比 Drew 的视频更好。【参考方案2】:

已经提到的 Tabular 插件的替代品是古老的 Align plugin。

【讨论】:

【参考方案3】:

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

:s/=/                         =/

然后,块选择 (Ctrl-V) 以便选择所有 = 字符和后面的所有内容。 Yank(y) 那个,粘贴到别的地方。

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

不过,为了达到预期的效果,这感觉需要做很多工作。

【讨论】:

确实做了很多工作。为什么不是一个简单的 :s 只为所有行添加足够的制表符/空格,除了 = 之前具有最长标识符的行

以上是关于将文本格式化为块(对齐第二列)的主要内容,如果未能解决你的问题,请参考以下文章

情景linux--如何得出一个文件的第二列?

有没有办法设置表格中整列的文本对齐方式?

将第二列向右对齐

将 Excel 格式化为文本格式

将文本格式化为数字的 SQLplus 脚本

将 TextField 文本格式化为价格