I am going to suggest using Ctrl + v (
<C-v>) to make a block.
It sounds as if putting the second block after the first doesn't do what you want. However, if you put the first block in front of the second block, it should work.
To move the first paragraph to before the second paragraph you can do:
vip # Visually select the first [Inner] Paragraph (cursor inside first block)
<C-v>$ # Change to Visual Block mode and select all the way to end of line
x # Cut the first paragraph into default register
"_d) # Delete paragraph into black hole register to remove leftover empty lines
P # Prepend the first paragraph (line-wise) before second paragraph
However, that doesn't leave any space between items. For example:
One way to fix this is to append a space to every item in the first block
vip # select the first paragraph
: # enter command mode
s # substitute command
/$ # replace End of line...
/ / # with a space (the second '/' here is optional)
<enter> # press enter to complete the substitution command
Original answer: (similar in idea to above solution, but not as generic). See more explanations in an earlier revision.
^---------------^ ^^ ^---^
Put a space @ end *1 *3
Cut top 2
*1 - Go down
*2 - Paste
*3 - Cleanup
A completely different solution that would require macros because it only does the move one line at a time. It jumps between top and bottom blocks and combines them.
One iteration is:
)j # Move down to the second paragraph and onto first line
D # Delete the top line of the second paragraph
<C-o> # Jump back to the top paragraph (Ctrl+o)
pk # Put line from bottom below and move back to top line
J # Join the two lines (white space is taken care of, leaves a single space)
j # Move down a line, ready to do it again
Run once: Repeat Repeat
apple => apple tomato => apple tomato => apple tomato
pear pear pear beans pear beans
banana banana banana banana potato
tomato beans potato
To create and use this as a macro do
2@t. (create and use a macro in register