On Fri, Apr 21, 2006 at 01:41:46AM +0200, Nikolai Weibull wrote:
> 
> I would be able to define my long-wanted "g:"
> mapping that makes : act like an operator, i.e., first waits for a
> range and then starts command mode with that range on the command
> line:
> 
> noremap <silent> g: <Esc>:set operatorfunc=GetCommandModeRange<CR>g@
> 
[snip]
> I can't put the :...-stuff after the g@, as Vim will just eat them up
> for the g@ command.
> 
> Perhaps I'm missing something, but I don't think so.  There's simply
> no way to do what I want.
> 
> If anyone has a hack to enable me to do this, please share it with me.

     You *can* add the range '[,'] at the end of the mapping if you use
inputsave() and inputrestore().  The following example uses g@ with a
dummy function to set these two marks.  If you use the GetMotion()
function from foo.vim

http://www.vim.org/script.php?script_id=72

(my file of example vim functions) then you do not have to hit <CR>
after entering your motion.  It is not entirely smooth, and adding
"silent" does not help much, but please tinker.

HTH                                     --Benji Fisher

fun! Dummy(mode)
endfun

fun! Gat()
  call inputsave()
  " silent let mtn = GetMotion("")
  let mtn = input("motion: ")
  call inputrestore()
  set operatorfunc=Dummy
  execute "normal g@" . mtn
endfun

map g: :call Gat()<CR>:'[,']

Reply via email to