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