Loading ...
Sorry, an error occurred while loading the content.

Re: How to highligh multiple matches?

Expand Messages
  • Andy Wokula
    ... This is old code from/after a similar thread. Hint: use :SearchTwo with bang to get both items matched. Created: 2008 Aug 07 Last Change: 2009
    Message 1 of 4 , Apr 27, 2010
    • 0 Attachment
      Am 27.04.2010 16:21, schrieb Peter Princz:
      > "foo" in the last question, sorry.
      >
      > /p.
      >
      > On 27 April 2010 16:19, Peter Princz<princzp@...> wrote:
      >
      >> Dear vim community,
      >>
      >> I have a small issue, it really just bugs me. Could not find it in the
      >> documentation, maybe the collective wisdom of this list will solve it.
      >>
      >> A search pattern of: .*\zsfoo\ze\&.*\zsbar\ze will find all instances where
      >> "foo" and "bar" are at the same line, in arbitrary order.
      >> This is OK, but I want them to be highlighted as matches too, both of them.
      >>
      >>
      >> Now, only "bar" will be highlighted, not "foo".
      >>
      >> Do yo have any idea, how to highlight "bar" as well?
      >> Any help very much appreciated.
      >>
      >> Have a nice day,
      >> Peter

      This is old code from/after a similar thread.
      Hint: use :SearchTwo with bang to get both items matched.


      " Created: 2008 Aug 07
      " Last Change: 2009 Jun 05
      " Rev Days: 3

      " Search for 'abc\|def', but match only if the alternative word matches in
      " the same line. I.e. if 'abc' matches, require a match for 'def' in the
      " same line (and vice versa with [!]). This is unlike the LogiPat plugin,
      " which always matches whole lines.
      "
      " /\%(def.*\)\@<=abc\|abc\%(.*def\)\@=\|\%(abc.*\)\@<=def\|def\%(.*abc\)\@=

      com! -bang -nargs=* SearchTwo call feedkeys('/'.SearchTwo(<bang>0, <f-args>))

      " lskdfjlsdkf abc lksdjflsadkf abc
      " lsk def dfjlsdkf abc lksdjflsadkf abc laskdjflsd abc
      " sldkfj lsdkf def lsdkflsfa sdef lsdkfjsdaf
      " lsdfjsldk abc lsadkfsd def
      " ;sldkf def lsdfksd abc lsdkfj
      " all sdkf def lsdkfjsd
      " alsdkfj sad abc lsadkfj
      "abcdef
      "defabc

      func! SearchTwo(bang, word1, word2)
      let wp1 = a:word1 " anwolib#MagicEscape(a:word1)
      let wp2 = a:word2 " anwolib#MagicEscape(a:word2)
      let beffmt = '\%%(%s.*\)\@<=%s'
      let aftfmt = '%s\%%(.*%s\)\@='
      let patfmt = beffmt.'\|'.aftfmt
      let pat1 = printf(patfmt, wp2, wp1, wp1, wp2)
      let pat2 = printf(patfmt, wp1, wp2, wp2, wp1)
      if a:bang
      return pat1.'\|'.pat2
      else
      return pat1
      endif
      endfunc

      " match abc with a match for def before it
      " match abc with a match for def after it
      " match def with a match for abc before it
      " match def with a match for abc after it
      "
      " (def) abc
      " abc (def)
      " (abc) def
      " def (abc)

      --
      Andy

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

      Subscription settings: http://groups.google.com/group/vim_use/subscribe?hl=en
    Your message has been successfully submitted and would be delivered to recipients shortly.