-4

我想使用 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)

这个怎么做?谢谢你。

4

3 回答 3

1

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

:%s/\<sa[.]//g
:%s/\(Column(\)'\([a-z]\+\)',\(.\+\)/\2    =\1 \3/g
于 2013-06-24T15:53:31.150 回答
0

您可能希望结合使用 Blockwise Visual 模式 ( :h blockwise-visual) 来替换字符的矩形,并使用 Replace 模式 ( :h R) 来用不同行的内容来改写空白。

于 2013-06-23T12:05:43.327 回答
0

这是一个让你接近的宏:

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

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

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

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

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

习惯于录制和使用宏是非常值得的。它们非常适合这种可重复的临时编辑。您只需要小心以可重复的方式记录宏。

于 2013-06-23T14:04:07.700 回答