I'm writing some vimscript and would like to preserve the cursor position after a yank occurs in visual mode.

Ths issue is that I can't find any way to get the cursor position while in visual mode. It's always at the beginning or the end of the selection but it's not clear which one.

There are the > and < marks to get the beginning/end of the selection. There is also v which appears to work nearly identical to <. And of course there is . for cursor position but when in visual mode this returns the beginning of the selection instead.

  • Where you've said register, did you mean mark? – tommcdo Mar 26 '15 at 0:08
  • Yep, that's what I meant. I updated the question. – Steve Vermeulen Mar 26 '15 at 1:05
  • 1
    Your function will work outside of visual mode anyway so you can probably use getpos(). Could you show us what you already have? – romainl Mar 26 '15 at 8:13

Not 100% sure if this is what you're trying to do, but following command will restore the cursor to the position it was in during the last visual mode:

execute "normal! gv\<Esc>"

This may or may not be what you want, depending on what actions you're applying to the text selected in visual mode. (It works well if you're just yanking the text.)

If you need to know the cursor position before doing anything with the selection, you could try using :execute "normal! \<esc>", grabbing the cursor position, and then using :normal! gv to reset the visual selection.

  • That's exactly what I was looking for, thanks. – Steve Vermeulen Mar 26 '15 at 13:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.