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<[email protected]>
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

Reply via email to