確かに、1つのコピー/貼り付け(ブロックモードの選択を使用)でこれをすべて実行できますが、それはあなたが望んでいることではないと思います。
Exコマンドだけでこれを実行したい場合
:5,8del | let l=split(@") | 1,4s/$/\=remove(l,0)/
変形する
work it
make it
do it
makes us
harder
better
faster
stronger
~
に
work it harder
make it better
do it faster
makes us stronger
~
更新:これだけ多くの賛成票がある答えは、より完全な説明に値します。
Vimでは、パイプ文字(|)を使用して複数のExコマンドをチェーンすることができるため、上記は次と同等です。
:5,8del
:let l=split(@")
:1,4s/$/\=remove(l,0)/
多くのExコマンドは、一連の行をプレフィックス引数として受け入れます-上記の場合、5,8before del、1,4before、before s///はコマンドが操作する行を指定します。
del指定された行を削除します。レジスタ引数を取ることができますが、それが指定されていない場合は@"、通常モードでの削除と同様に、名前のないレジスタに行をダンプします。 let l=split(@")次に、デフォルトの区切り文字である空白を使用して、削除された行をリストに分割します。次のように、削除された行に空白がある入力を適切に処理するには、
more than
hour
our
never
ever
after
work is
over
~
「work is」が2つのリスト要素に分割されないようにするには、別の区切り文字を指定する必要がありますlet l=split(@","\n")。
最後に、置換s/$/\=remove(l,0)/では、各行の終わり($)を式の値に置き換えますremove(l,0)。 remove(l,0)リストを変更し、l最初の要素を削除して返します。これにより、削除された行を読み取る順序で置き換えることができます。代わりに、を使用して、削除された行を逆の順序で置き換えることができremove(l,-1)ます。
xを結合しx+2ますか?