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

本当にこのためのマクロを作ります。下の行を削除し、上に移動して貼り付け、行を削除してJから、他の行でマクロを実行します。私が適切だと思う他の方法は、フィルターとして機能する別のスクリプトです。

于 2010-06-25T18:41:00.380 に答える