使用 vi/vim 复制部分行文本

Duplicate partial line text with vi/vim

我有如下两个列表:

abc.domain.com
defg.domain.com
hijklmn.domain.com
abc.domain.com/sub/
defg.domain.com/anothersub/
hijklmn.domain.com/thirdsub/

我需要让这两个列表显示如下:

abc.domain.com?ref=abc
defg.domain.com?ref=defg
hijklmn.domain.com?ref=hijklmn
abc.domain.com/sub/?ref=sub
defg.domain.com/anothersub/?ref=anothersub
hijklmn.domain.com/thirdsub/?ref=thirdsub

如何在 vi/vim 中完成此操作?

假设这两个列表在两个不同的缓冲区中。我们可以使用 vim 的 :s 命令来完成这项工作:

对于列表 1:

%s/\v([^.]+).*/&?ref=/

对于列表 2:

%s#\v.*/([^/]+)/$#&?ref=#

如果两个列表混合在一个缓冲区中,可以使用:g命令只对某个目标进行替换。