1

如果我有一个句子——“我认识一个名叫 Ted 的人喜欢 //^$”——或者基本上是一个包含很多字符的句子,我不想转义,我想插入该句子的不同名称的副本(例如约翰玛丽鲍勃)...

for 循环可以通过复制句子,将其粘贴到下一行,然后替换名称来做到这一点吗?我如何告诉它粘贴在哪里?

我也可以先粘贴名称列表,然后将句子放在名称周围 - 例如:s/^/I know a person named /,但我发现如果有很多文本需要转义很多字符,我可能会在某处出错并浪费有时间仔细检查表达式。

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

4

2 回答 2

1

您可以使用 vim 中的宏来执行此操作。在这里查看 vim 宏的解释:http: //vim.wikia.com/wiki/Macros。这比使用正则表达式要容易得多。

于 2012-10-04T18:23:18.130 回答
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

对于每个名称行,您现在可以重播宏:@m@@

注意:在制作宏并遇到重放问题时,我总是发现查看我的录制注册表的内容很有帮助。您可以^R^Rm查看您记录的所有命令。

于 2012-10-04T18:38:34.733 回答