You can certainly do all this with a single copy/paste (using block-mode selection), but I'm guessing that's not what you want.

If you want to do this with just Ex commands

:5,8del | let l=split(@") | 1,4s/$/\=remove(l,0)/

will transform

work it make it do it makes us harder better faster stronger ~

into

work it harder make it better do it faster makes us stronger ~

UPDATE: An answer with this many upvotes deserves a more thorough explanation.

In Vim, you can use the pipe character ( | ) to chain multiple Ex commands, so the above is equivalent to

:5,8del :let l=split(@") :1,4s/$/\=remove(l,0)/

Many Ex commands accept a range of lines as a prefix argument - in the above case the 5,8 before the del and the 1,4 before the s/// specify which lines the commands operate on.

del deletes the given lines. It can take a register argument, but when one is not given, it dumps the lines to the unnamed register, @" , just like deleting in normal mode does. let l=split(@") then splits the deleted lines into a list, using the default delimiter: whitespace. To work properly on input that had whitespace in the deleted lines, like:

more than hour our never ever after work is over ~

we'd need to specify a different delimiter, to prevent "work is" from being split into two list elements: let l=split(@","

") .