Vim:对于多个文件:复制所有文本,替换和粘贴

Pan*_*nsy 5 vim

我想使用Vim对多个文件执行以下操作:

  1. 复制每个文件中的所有文本
  2. 替换一些文字
  3. 将复制的文本粘贴到每个文件的末尾
  4. 替换其他一些文字

以下是我对一个文件的命令:

:%y
:%s/old1/new1/g
:G
:P
:%s/old2/new2/g
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我这样做的语法吗?特别是我是Vim的新手!

我发现argdo可以在多个文件上执行命令.我找到了许多使用argdo替换文本的例子,但我找不到使用argdo的语法:%y,:G或:P

谢谢.

seh*_*ehe 4

就像 @ib 提到的,我会用 ex 命令1来做到这一点

:argdo %y | %s/old1/new1/g | $pu | %s/old2/new2/g
Run Code Online (Sandbox Code Playgroud)

您也很有可能希望在独占范围上进行操作(仅对第一部分进行第一次替换,仅对第二部分进行第二次替换):

:argdo $mark a | %co$ | 1,'a s/old1/new1/g | 'a,$s/old2/new2/g
Run Code Online (Sandbox Code Playgroud)

为了允许不匹配的替换,添加s///e和添加silent!可以使操作在文件很多的情况下更快。

:silent! argdo $mark a | %co$ | 1,'a s/old1/new1/ge | 'a,$s/old2/new2/ge
Run Code Online (Sandbox Code Playgroud)

1请注意,argdo 默认需要 Ex 命令列表。您可以使用 egargdo norm! ggyG来使用正常模式命令

  • @Pansy:还可以考虑使用`:update`(简称`:up`)而不是`:write`。与后者不同的是,前者如果缓冲区未被修改则不会写入缓冲区。 (2认同)