Stewart Stremler wrote:
begin quoting Ralph Shumaker as of Sun, Feb 11, 2007 at 05:07:45PM -0800:
I've been having fun, playing with regular expressions in vi. But I'd
like to do more.
How can I do a search that regards line breaks as if they were a space?
Don't think you can in vi.
In vim, use \n.
To search for whitespace-or-newline, use [], e.g., "/a[ \n]space[ \n]*>"
search for the string "a" followed by a space or newline followed by
"space" followed by any number of spaces and/or newlines followed by
">".
If that's not easy, then how can I replace all line breaks with a space
except for line breaks or double line breaks preceding any line that
begins with "^"?
This is where I'd be tempted dig out awk or perl.
However.
I have a text file that has been line wrapped at about 80 characters.
Each real line begins with the "^". Each wrapped line does not. And
each line that begins with "^" is preceded by a blank line.
If I'm restricting myself to vi(m) when converting the file you
describe, I'd start with a macro. Possibly something like
:map ^P /^[a-zA-Z]^V^M?^\^^V^MJ0
Where
: -> go to command mode
map -> map a keystroke to the following
^P -> control-p, the keystroke I'm mapping
/ -> "search"
^ -> start-of-line anchor
[a-zA-Z] -> any alpha character
^V -> control-V, "escape next keystroke"
^M -> control-M, "return", which means "do this search"
? -> "search backwards"
^ -> start-of-line anchor
\^ -> the caret character
^V -> control-V, "escape next keystroke"
^M -> control-M, "return", which means "do this search"
J -> "join" the next line to this line
0 -> go to column 0 (to prepare for the next search)
...and then I'd hit ^P until it didn't find a match, and then undo
the last join. Alternatively, the search-and-find-previous could
be put after the join, and the first search could be done manually.
Text that I want to search for (or replace) can wrap around these line
breaks, but not around the "^".
Try using "[ \n]*" in your pattern. (The * is to handle trailing
spaces *and* newlines, you may want "[ \n][ \n]*" if that causes
problems.
[snip]
If I want to search the file for "line that is" and replace it with
"line which is", I would do ":%s/line that is/line which is/cg". But
this would totally miss the only occurrence of it in my example above.
If I could get vi to regard line breaks (during a search or replace) as
if they were a space, I'd be set.
Hope this helps.
Tremendously, thank you. (I should have said vim, sorry.)
--
[email protected]
http://www.kernel-panic.org/cgi-bin/mailman/listinfo/kplug-list