Andy Wokula schrieb:
> 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.
Ok, I was wrong. Vim *has* inputsave() and inputrestore().
nmap <silent> g: :set operatorfunc=<sid>ExRangeOp<CR>g@
let @a = "g:}join"
" final <CR> to be added
func! s:ExRangeOp(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 inputsave()
call feedkeys(':'. range. "\<c-r>=''[inputrestore()]\r", 'n')
endfunc
--
Andy
--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---