On Wed, 6 Sep 2006 at 12:18pm, Druce, Richard wrote:

> I'm trying to select all the text matching a (multi-line) pattern so I
> can put it into a separate document. I thought the global command would
> work but it only copies the first matching line, does anyone know a
> command to do this?
>
> Cheers,
> Richard.

I don't see any Vim primitives to work with multi-line matches. I think
the searchpos() function should be extended to return the [line, col] of
the end of the match as well. May be I am missing something, but in the
absence of primitives, you can probably write a function which will
try to guess what the matching lines are, something like this (only
partly tested):

"function! FindMatchingRange()
function! FindMatchingLines()
  let start = line('.')
  let text = ''
  for end in range(start, line('$'))
    let text = text."\n".getline(end)
    if text =~ @/
      "return start.','.end
      return text
    endif
  endfor
  return ''
endfunction

You can use this either use it with :g command, or another function

:let matches=[]
:g/pattern/call add(matches, FindMatchingLines())

you can paste the matches in a new buffer as:

:call append('$', matches)

Read the help on |string-match| for limitations.

-- 
HTH,
Hari

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Reply via email to