Nikolai Weibull schrieb:
> On Jan 8, 2008 6:45 PM, Charles E Campbell Jr <[EMAIL PROTECTED]> wrote:
>
>> It might help folks help you if you included the
>> get_command_mode_range() function.
>
> Ugh, yeah, I'm beginning to have a suspicion as to what the problem is:
>
> function! s:get_command_mode_range(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
>
> call feedkeys(':' . range, 'n')
> endfunction
>
> I'm guessing that feedkeys() is the culprit here.
Yes, feedkeys() puts its argument at the end of the input buffer, which
already contains the contents of register a.
I think you have found a limit of g@ -- I wasn't able to find a solution
that keeps the elegance, now an additional _r in the recording is needed
to insert the range.
Try this one (g: for Normal mode only):
nmap g: :set operatorfunc=<sid>get_command_mode_range<CR>g@
let @a = "g:}_rj\r"
" note: the final ^M causes an additional ^@ to be added to the
" register
func! s:get_command_mode_range(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
exe "nmap _r :". range
endfunc
Problem:
If we use g@ in the {rhs} of a mapping for g: , we cannot add further
keys there, because Vim has no concept of place holders for the motion
the user has to type. Currently, the first few of the "further keys"
will be taken as the motion for g@ before continuing.
Fiction (can be safely ignored):
A solution (another todo item?) could be a mode in which g@ (i.e. its
new brother, gX@) evaluates the operatorfunction as if defined with
<expr>. This would change the above code into this:
nmap g: :set operatorfunc=<sid>get_command_mode_range<CR>gX@
let @a = "g:}j\r"
" ah, without _r
func! s:get_command_mode_range(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
return ":". range
endfunc
--
Andy
--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---