vim: don't rely on selection when selecting current char.
vim: ensure the originating character selection is always selected

This fixes things like `vkj' from miss-selecting the range without the
original cursor position.
vim: don't try to overselect when moving down.
vim: preserve selected character column when moving up and down.