I've tried <C-U>:call~ (mistake for :<C-U>call~) yesterday. Now I know what
Christian was trying to tell me. I solved this problem now.
Thank you very much, Ben.

2009/10/18 Ben Fritz <[email protected]>

>
>
>
> On Oct 16, 2:16 am, Dewr <[email protected]> wrote:
> > keymapped functions repeat when it called while vim is selecting a text
> > block.
> >
> > I have tested with this code.
> > *<code>
> > function foobar()
> >  echo "foobar!"
> > endfunction
> > map <F5> :call foobar()<CR>
> > </code>*
> >
> > I could avoid this by adding ^[ (=esc) at the head of key-mapping
> command.
> >
>
> From :help :call you can see:
>
>                When a range is given and the function doesn't handle it
>                itself, the function is executed for each line in the range,
>                with the cursor in the first column of that line.
>
> Now, combine that with the knowledge that :map takes effect in visual
> mode, and that pressing ':' in visual mode causes the command-line to
> be pre-populated with :'<,'> (a range starting on the first line of
> the selection and ending on the last), you can figure out what's going
> on.
>
> When you press <F5> in visual mode, what you really execute is:
>
> :'<,'>call foobar()<CR>
>
> This will call foobar() once for each line you have selected.
>
> To get around this, you need to use mode-specific mappings instead:
>
> nmap <F5> :call foobar()<cr>
> vmap <f5> :<c-u>call foobar()<cr>
>
> The <C-U> is to get rid of the pre-populated '<,'> on the command
> line. See :help c_CTRL-U
>
> This will also work, as you noticed:
>
> vmap <F5> <ESC>:call foobar()<CR>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_use" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Reply via email to