1

假设我在 Vim 中有以下文本:

file1.txt
file2.txt
file3.txt

renamed1.txt
renamed2.txt
renamed3.txt

我想要一个转换如下:

file1.txt renamed1.txt
file2.txt renamed2.txt
file3.txt renamed3.txt

我想到的是如下内容:

:1,3 s/$/ <the text that is 4 lines below this line>

我不知道如何指定<the text that is 4 lines below this line>零件。

我尝试过类似.+4(当前行下方 4 行)但无济于事。

4

3 回答 3

7

你可以用块状剪切和粘贴来做到这一点。

1)在每个“重命名”行的开头插入空格,例如:5,7s/^/ /

2) 使用分块视觉选择 ( ctrl-v) 选择所有“文件”行,然后按d删除它们

3) 再次使用块状视觉选择来选择所有重命名行开头的空格字符,然后按p。这会将您删除的块中的相应行粘贴到每行的开头。

于 2010-06-25T19:01:02.657 回答
4
:1,3:s/\ze\n\%(.*\n\)\{3}\(.*\)/ \1

解释:

 \ze - end of replaced part of match - the string matched by the rest of the pattern will not be consumed
 \n - end of current line
 \%(.*\n\)\{3} - next 3 lines
 \(.*\) - content of 4th line from here

这将使后面的行留在原处。

于 2010-06-25T19:26:48.583 回答
3

我真的会为此做一个宏。删除下面的行,向上移动,粘贴,Join 行,然后在其他行上运行宏。我认为合适的另一种方法是使用单独的脚本作为过滤器。

于 2010-06-25T18:41:00.380 回答