Joseph Barker schrieb:
On Friday 01 June 2007 13:11:50 you wrote:
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.
You could also try this:
function VisualMove()
call search('\u')
return ""
endfunction
vmap ,w @=VisualMove()<cr>
The following is possible:
function VisualMove()
normal! gv
call search('\u')
" visual mode still on
endfunction
vmap ,w :<c-u>call VisualMove()<cr>
That works perfectly, although I have no idea why. Can you explain? I would
think that calling `normal! gv` would have no effect, since that should
reselect the current selection. But for some reason it allows you to call
search() while staying in visual mode, which makes no sense to me. Perhaps
I'm not looking at the right place in the documentation.
Entering Cmdline mode with
:<c-u>call ...
turns Visual mode off, therefore
normal! gv
reselects the visual area.
Within a function (or script or Ex-mode), the visual area is not turned off
between ex commands, because there is no actual mode switching
... IMHO.
I don't know if this is mentioned in the help.
--
Regards,
Andy