使用列表的内容添加行

时间:2012-10-04 18:18:27

标签: vim

如果我有一句话 - “我认识一个名叫Ted的人喜欢// ^ $” - 或者基本上是一个有很多字符的句子,我觉得不会逃避,我想插入那句话的副本不同的名字(例如John Mary Bob)......

for循环可以通过复制句子,将其粘贴为下一行,然后将名称删除来完成此操作吗?我如何告诉它粘贴的位置?

我还可以首先粘贴名称列表,然后将名称中的句子分开 - 例如:s/^/I know a person named /,但我发现如果有很多文字有很多字符可以逃脱,我' ll可能会在某个地方出错,浪费时间仔细检查表达式。

那么,是否有更简单的方法从句子中获取内容并将其放入替代命令中?

2 个答案:

答案 0 :(得分:1)

您可以使用vim中的宏执行此操作。 点击此处查看vim宏的解释:http://vim.wikia.com/wiki/Macros。 它比使用正则表达式更容易。

答案 1 :(得分:0)

像Chiel92所说,宏是最简单的方法。假设您有一个如下所示的文本文件:

I know a person named XXX who like //^$

John
Mary
Bob

就我个人而言:

  1. 转到第1行,然后将该行复制到命名缓冲区::1<enter>"iyy
  2. 转到第3行并记录一个在行上复制名称的宏,粘贴i缓冲区的内容,然后将XXX替换为该行上的名称:
    1. 转到第3行::3<enter>
    2. 开始录制宏以注册m:qm
    3. 将名称删除到其他注册表中:"od$
    4. 粘贴到模板中:"ipkdd
    5. 将XXX替换为名称::s/XXX/^Ro/
    6. 转到下一行:j
    7. 完成录制:q
  3. 对于每个名称行,您现在可以重播宏:@m@@

    注意:在制作宏并重放问题时,我总是觉得查看录制注册表的内容会很有帮助。您只需^R^Rm即可查看录制的所有命令。