对vim中的文本重复复杂更改

时间:2016-07-19 00:27:38

标签: vim

在以下代码段中,我想将totalMBfree中的每一个都转换为float()

totalMBytes = int32(total / MB)
freeMBytes = int32(free / MB)

是否有一种快速方法可以在一个位置进行此更改并使用vim中的技巧将其应用到其他位置?预期的输出是:

totalMBytes = int32(float(total) / float(MB))
freeMBytes = int32(float(free) / float(MB))

1 个答案:

答案 0 :(得分:3)

首先,我们有专门针对Vim问题的网站的vi.SE部分。你可能会在那里得到更好的答案(如果你有更多的Vim问题)。

然而,就问题本身而言,有几种方法可以做到这一点。从:

开始
[t]otalMBytes = int32(total / MB)
freeMBytes = int32(free / MB)

假设光标位于t(标记为)并假设该文件有其他行。并且最终结果应为:

totalMBytes = (float)int32((float)total / (float)MB)
freeMBytes = (float)int32((float)free / (float)MB)

让我们给出几个选择:

使用.

使用w跳转字词,.重复更改,如下所示:

2wi(float)<esc>3w.3w.5w.3w.3w.

说明:

  • 2w向前跳2个字。
  • i(float)<esc>进入插入模式,插入(浮动)并退出插入模式。
  • 3w向前移动3个字
  • .重复此职位的最后一次更改
  • ...冲洗重复

(你可以四处走动并使用.,你不需要一个字一个字地去。)

使用正则表达式

选择Vj

两行
:'<,'>s/\v([ (])(\w)/\1(float)\2/g

使用宏

qq在注册q中录制宏并执行:

2wi(float)<esc>3w.3w.

这与第一个示例中的相同,但仅对第一行执行更改。现在按q停止录制宏,然后按jg^以转到下一行的第一个字符。最后执行宏:

@q