Joseph Barker schrieb:
Hello, all.

I was recently helping someone out with a vim script (camelcasemotion.vim) which adds additional motion commands (they treat camel-cased words (WordsLikeThis) as separate words, rather than as a single word). This is easy enough to do in normal and operator-pending mode. It seems to be very complicated to do this in visual mode, though -- calling a function (or anything that lets you move the cursor) seems to force you to leave visual mode (i.e., doing `vmap ,w :<C-U>call MoveCursor()` will move the cursor to the right place, but you're no longer in visual mode).

My approach to this was to call the movement function, set a mark, select the previous visual block (with gv) and then jump to the mark that was previously set. The mapping that I created to deal with this is the following:

vmap <silent> ,w @="\33:\25call <SID>CamelCaseMotion('w',1,'v')"<CR><CR>m`gvg``

This seems somewhat inelegant, and also clobbers a mark to be able to accomplish its magic. Is there an easier way to accomplish the same thing? It seems like there should be, but I was unable to figure one out.

The following is possible:

   function VisualMove()
      normal! gv
      call search('\u')
      " visual mode still on
   endfunction

   vmap ,w :<c-u>call VisualMove()<cr>

--
Regards,
Andy

Reply via email to