[vim] improve handling of external selections

makes sure state of the selection and visualMode are always in sync
Visual mode selection is empty on empty lines. And visualBlock selection can be empty when clipped to a shorter line.