Wednesday, October 3, 2012

Re: [Rephrased] Problem with a regular expression in Vim

On Wednesday, October 3, 2012 9:05:14 AM UTC-5, Xell Liu wrote:
> Hi all,
>
>
>
> Sorry for the previous mail where my ambiguous expression led to a
>
> somewhat time-wasting discussion. Thanks for the guys who tried to
>
> help. Here is the rephrased version.
>
>
>
> I what to use command :match to highlight some text, which is
>
> free-form and thus can not be enumerated. The text is always
>
> surrounded by a pair of "==". I need a regex to match the text.
>
>
>
> In the following example, what I want to be highlighted is "aaa" and "bbb"
>
>
>
> xxx==aaa==cccddd==bbb==yyy
>
>
>
> In the following example, what I want is "a", "c", "e" and "g"
>
>
>
> x==a==b==c==d==e==f==g==y
>
>
>

Ok...so you want all "even numbered" things surrounded by ==, correct?

So you have:

{beginning of line}{possible text not to match}=={text to match}=={text not to match}=={text to match}==...

This seems to work for me:

\%(^\|[^=]*==[^=]*==\)\@<=[^=]*==\zs[^=]*\ze==

The trick here is that I match only at positions where either the beginning of the line, or a previous non-match/match pair precede the match.

Probably this pattern could be made simpler but I wasn't able to find a simpler one quickly. The /\@<= is special because unlike \zs, as noted in the :help, "the part of the pattern after '\@<='...[is]...checked for a match first", so I couldn't just drop it and use the \zs by itself.

By the way, you still haven't said what task you're trying to accomplish, beyond that you want to use :match. If syntax highlighting with :syn match would work for you instead, probably the easiest way to highlight these would be using the full ==...== string, and pattern offsets. :he :syn-pattern-offset

--
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

No comments:

Post a Comment