Here's a solution that works even if there are surrounding characters:
kdjP`]lx`<P
Which can be mapped to a key like so:
vnoremap <C-r> kdjP`]lx`<P
Explanation (here, bolded letters symbolize the cursor / selected text):
Initial text:
.......
...h...
...e...
...l...
...l...
...o...
.......
kdjP
: cut all but the last letter and paste it one row down:
.......
......
...h...
...e...
...l...
...lo...
.......
`]lx
: go to the end of the text that was just pasted (`]
), move to the character next to it (l
), and cut it (x
)1:
.......
......
...h...
...e...
...l...
...l...
.......
`<P
: go back to the beginning of the original visual selection (`<
), and paste the last character you just deleted (P
):
.......
...o...
...h...
...e...
...l...
...l...
.......
1: the dot to the right of the l
is bolded, although it's hard to see.