確かに、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,8
before del
、1,4
before、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
ますか?