使用vim进行结构化文本转换

时间:2013-06-23 08:02:44

标签: vim

我想使用vim来转换

中的以下文本块
            sa.Column('id', sa.Integer, primary_key=True),
            sa.Column('title', sa.String(100)),
            sa.Column('isbn', sa.String(20)),
            sa.Column('authors',sa.String(400),nullable=False),
            sa.Column('year',sa.Integer,nullable=False)

  id          = Column(Integer, primary_key=True)
  title       = Column(String(100))
  isbn        = Column(String(20))
  authors     = Column(String(400),nullable=False)
  year        = Column(Integer,nullable=False)

怎么做?谢谢。

3 个答案:

答案 0 :(得分:1)

根据您正在转换的行数(例如,实际上只是这几行需要这个吗?),如果使用分组超过30行,我会考虑使用替换文本方法:

:%s/\<sa[.]//g
:%s/\(Column(\)'\([a-z]\+\)',\(.\+\)/\2    =\1 \3/g

答案 1 :(得分:0)

您可能需要组合使用Blockwise Visual模式(:h blockwise-visual)来替换字符矩形和替换模式(:h R)以使用不同行之间的内容来改写空格。

答案 2 :(得分:0)

这是一个让你走近的宏:

:call setreg('a',"0f'ldw0pa =  \<esc>df.f'df.j")

该命令会将录制的宏放入a寄存器中,因此您可以通过键入@a或使用5@a在数字行上在当前行上调用它。

基本上,它执行以下步骤:

  • 跳转到该行的第一个'并删除以下字词
  • 跳转到该行的开头并粘贴该字词,然后是=
  • =删除到下一个.
  • 跳转到下一个'并删除,直到以下.

它不会删除尾随逗号(您可以使用全局:s[ubstitute])并且它不会执行对齐。

非常值得习惯录制和使用宏。它们是这种可重复的特殊编辑的理想选择。您只需要小心以可重复的方式记录宏。