Andy,
Have you tried your suggestion? If it works, could you
share your code?
Richard
On 05/08/2012 03:10 PM, Andrew Long wrote:
>
> On 8 May 2012, at 23:08, Richard wrote:
>
>> Well, I spoke too soon. What I wanted was to highlight
>> multiple block with different colors *at the same time*
>> Seems that match only works on a single pattern at a time.
>>
>> Richard
>
> You could try generating a random name for each block? or base it off the line/column pairs?
>
> Regards, Andy
>
>
>>
>> On May 8, 3:01 pm, richard emberson<richard.ember...@gmail.com>
>> wrote:
>>> Tim,
>>>
>>> I finally got to the point in my project where I could tryout
>>> your code. In one sense your code was similar to some of
>>> my attempts at using the match/highlight capability but
>>> I 1) did not order the column/line correctly and, more
>>> importantly, 2) I did not have a trailing '.' in the
>>> match patterns.
>>>
>>> If one is willing to create highlight groups on the fly,
>>> then one can programatically highlight arbitrary
>>> blocks of code ... W5!
>>>
>>> function! XXX(name, c1, c2, l1, l2)
>>> exec "highlight! " . a:name . " ctermbg=green guibg=green"
>>> exec "sil! match " . a:name. ' /\%>' .a:c1. 'c\%<' .a:c2. 'c\%>'
>>> .a:l1. 'l\%<' .a:l2. 'l./'
>>> endfunction
>>>
>>> map<Leader>h :call XXX("Foo33",8,21,5,14)<CR>
>>>
>>> Thanks.
>>>
>>> Richard Emberson
>>>
>>> ps: 5W == Which Was What We Wanted
>>>
>>> On 05/06/2012 05:12 PM, Tim Chase wrote:
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>> On 05/06/12 16:14, Richard wrote:
>>>>> I'd like to highlight an arbitrary block of text even when
>>>>> normal syntax-base highlighting is in effect.
>>>>> Now, one can highlight a block of height 1 using matching:
>>>>> :hi Green ctermbg=Green
>>>>> :match Green /\%10l\%30c.*\%40c\%10l/
>>>>> :match none
>>>>> But what I'd like to do is for a block with height
>>>>> greater than 1; something like what can be done
>>>>> with Cntl-V visual block selection but without using
>>>>> visual selection.
>>>>> I've search the net without finding a solution.
>>>>> Is it possible?
>>>
>>>> I'm not sure if this does what you want, but I threw it together in
>>>> the hopes that it was close. Just visually highlight the range
>>>> (linewise, characterwise, or blockwise) that you want to highlight
>>>> and press<f4>. Adjust the "Error" at the bottom for whatever
>>>> highlighting group you want (in the case of your example, "Green")
>>>
>>>> -tim
>>>
>>>> function! Hi(scheme)
>>>> let l:mode=visualmode()
>>>> let [_, lnum1, col1, _]=getpos("'<")
>>>> let [_, lnum2, col2, _]=getpos("'>")
>>>> if l:mode == 'v'
>>>> if lnum1==lnum2
>>>> let range='\%'.lnum1.'l\%>'.(col1-1).'c.*\%<'.(col2+1).'c'
>>>> else
>>>> let range=join([
>>>> \'\%'.lnum1.'l\%>'.(col1-1).'c.*',
>>>> \'.*\%'.lnum2.'l\%<'.(col2+1).'c',
>>>> \'\%>'.lnum1.'l\%<'.lnum2.'l',
>>>> \], '\|')
>>>> endif
>>>> else
>>>> let left=min([col1, col2])
>>>> let right=max([col1, col2])
>>>> let top=min([lnum1, lnum2])
>>>> let bottom=max([lnum1, lnum2])
>>>> if l:mode == 'V'
>>>> let range=
>>>> \'\%>'.(top-1).'l'.
>>>> \'\%<'.(bottom+1).'l'.
>>>> \'.'
>>>> else " visual block
>>>> let range=
>>>> \'\%>'.(left-1).'c'.
>>>> \'\%<'.(right+1).'c'.
>>>> \'\%>'.(top-1).'l'.
>>>> \'\%<'.(bottom+1).'l'.
>>>> \'.'
>>>> endif
>>>> endif
>>>> exec printf('sil! match %s /%s/', a:scheme, range)
>>>> endfunction
>>>> vnoremap<f4> :<c-u>call Hi("Error")<cr>
>>>> nnoremap<f4> :match NONE<cr>
>>>
>>> --
>>> Quis custodiet ipsos custodes
>>
>> --
>> You received this message from the "vim_use" maillist.
>> Do not top-post! Type your reply below the text you are replying to.
>> For more information, visit http://www.vim.org/maillist.php
>
--
Quis custodiet ipsos custodes
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
Tuesday, May 8, 2012
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment