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
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
Tuesday, May 8, 2012
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment