vim:在一行中插入连续的数字

vim:在一行中插入连续的数字,vim,Vim,假设我想初始化这个元组: t = ( #(id, name) (1, 'aasd'), (2, 'bsfd'), (3, 'asf'), ... (21, 'aefae'), ) 我相信我可以用vim做到以下几点 1/键入以下内容: t = ( #(id, name) (, 'aasd'), (, 'bsfd'), (, 'asf'), ... (, 'aefae

假设我想初始化这个元组:

t = (
    #(id, name)
     (1, 'aasd'),
     (2, 'bsfd'),
     (3, 'asf'),
         ...
     (21, 'aefae'),
)
我相信我可以用vim做到以下几点

1/键入以下内容:

t = (
    #(id, name)
     (, 'aasd'),
     (, 'bsfd'),
     (, 'asf'),
         ...
     (, 'aefae'),
)
2/选择逗号行,然后键入一个复杂的键序列,该序列将写入连续的数字

有人知道我应该键入什么复杂的键序列吗?

这可以用宏来解决

  • 将光标放在第一个数字上:
    3Gf1
  • 开始录制:
    qq
  • 拉下数字
    lyT
    ,向下移动一个
    j
    ,粘贴
    P
    ,增加
    ^A
    (Ctrl+A),停止录制
    q
  • 对其余行执行宏:
    20@q
  • 总之:
    3Gf1lyT(jP^Aq20@q


    要避免计数,并应用增量直到不再有行,还可以将其转换为递归宏:

  • 将光标放在第一个数字上:
    3Gf1
  • 清除宏寄存器
    q
    并开始录制:
    qqqq
  • 拉下数字
    lyT
    ,向下一个
    j
    ,粘贴
    P
    ,增加
    ^A
    (Ctrl+A),重新调用宏
    @q
    。所有这些都是
    lyT(jP^A@q
  • 使用插件:

    • 按Ctrl-v并用逗号标记该列(即,您需要数字的位置)
    • Shift-i1Esc-这应该插入一列
      1
      s
    • gv-标记
      1
      s列
    • :I
      -这应将
      1
      s的列更改为数字
      1
      21

    较新的vims(从版本8开始)不使用VisIncr,而是支持在可视模式下递增。因此,我将使用:

    • 按Ctrl-V并用逗号标记该列
    • I1ESC将每个列初始化为1
    • 目测选择最后一行的第二行(例如使用gvj)
    • 按gCtrl-A使每行按顺序递增