将文本格式化为块(对齐第二列)
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 /=
或使用可视模式(v
或 V
)选择所需的行,按 :
并插入 Tabularize 命令,您的命令行将如下所示::'<,'>Tab /=
。
Tab
command 中的参数是一个正则表达式,这意味着你可以使用这个命令来对齐很多东西。您只会受到您的正则表达式知识的限制。
抱歉有任何英文错误:D
【讨论】:
完美,我希望我会在需要时记住它...为了使答案更好,您可以在示例中解释如何使用它(如:Tab /=
)。
@mliebelt 我添加了一个快速解释。但正如我所说,我给出的任何解释都不会比 Drew 的视频更好。【参考方案2】:
已经提到的 Tabular 插件的替代品是古老的 Align plugin。
【讨论】:
【参考方案3】:一种天真的方法是首先在等号周围留出足够的空间:
:s/=/ =/
然后,块选择 (Ctrl-V
) 以便选择所有 =
字符和后面的所有内容。 Yank(y
) 那个,粘贴到别的地方。
接下来,取消缩进粘贴的行(10<
通常就足够了),直到它们与最左边的位置对齐。然后,再次选择块并粘贴到它们被切断的位置。
不过,为了达到预期的效果,这感觉需要做很多工作。
【讨论】:
确实做了很多工作。为什么不是一个简单的 :s 只为所有行添加足够的制表符/空格,除了 = 之前具有最长标识符的行以上是关于将文本格式化为块(对齐第二列)的主要内容,如果未能解决你的问题,请参考以下文章