I really, really don't like the way mappings work in Vim.  They're too
much in between being something that executes a command and something
that just sends keys.  And the separation between user-defined
mappings and commands associated with a given ascii character has
always felt like a very poor design choice.

Still, I figured that now that we have operator functions and
expression mappings (that don't seem to be able to do anything that
<C-R>=... couldn't do) 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@

function! GetCommandModeRange(type)
  let b = line("'[")
  let e = line("']")

  if b < e
    let range = '.,+' . (e - b)
  elseif b == e
    let range = '.'
  else
    let range = '.,+' . (b - e)
  endif

  " start command mode with 'range' already on the command line
  ...
endfunction

The question is, how do I start command mode?  It's just not possible.
 It seems that we lack a function to just send a set of keystrokes to
Vim and Vim will take the appropriate action.

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.

Thanks.

  nikolai

--
Mood: tired, angry, frustrated
Threats made to my life to date: 2 (+1 since yesterday)
Threat-to-mood correlation: .5
Quote du jour: "Hell is other people." -- Jean-Paul Sartre

Reply via email to