Introduction
Introduction Statistics Contact Development Disclaimer Help
Answers to Part 4 Exercises
Solution to k37 Problem
% substitute /\(.*\)k37\(.*k37\)/\1q53\2
will do it. When there are two or more wild cards in a search
pattern, the editor finds the longest match for the first one that
allows any match for the subsequent ones, and so on.
Solution to Capitalization Problem
237 , 289 substitute :[^ ]*:\L\u&:g
Since the "\u" and "\l" metacharacters have limited reach, they
don't end the effect of a "\L" or "\U" metacharacter--they only
make a one-character exception.
Author's Note: Since I wrote this solution, I have learned that
it will not work under many implementations of the editor. So,
I've added below an alternate solution, more complex but more
powerful, that should work everywhere.
237 , 289 substitute :\([A-Za-z]\)\([A-Za-z-]*\):\u\1\L\2:g
Even in editing environments where my first solution would work,
the second one has certain advantages:
The second solution is not fooled by situations where
a punctuation mark leads off a word.
It's up to you whether the second solution does or does not
capitalize any but the first word in hyphenated compounds such
as Frankfurt-am-Main. If you want to capitalize those subsequent
words, just remove the last of the three hyphens within the
second character class in my alternate solution.
Answer to No-Op Problem
The editor thinks a substitution has been successfully made
whenever the outgoing search pattern is matched and no error
condition is encountered, even if it is only replacing nothing
with nothing. So when the editor finishes up by reporting the
number of substitutions it has made, it is giving me a count of
the empty lines in my file, which tells me how many paragraphs
plus headlines plus list items I have. Then I divide this number
into the count of lines in the file, to see whether my
paragraphs have gotten too long.
Solution to HTML tags problem
Where the substitution command to add a tag at the start of
a paragraph presently removes and then replaces any first
character on the line, now it should remove and replace anything
except a "<" character in that position. If that first
character is a "<" it is necessary that the substitution command
fail so it will change nothing. To arrange this, replace that
period in the search pattern with a negative character class --
"[^<]" -- which matches any character except the one that begins
every HTML tag.
Similarly, replace the period in the other substitution pattern
with the negative character class that matches any character
except the one that always ends an HTML tag. Now the two
commands will look like this:
global /^$/ + substitute /^[^<]/<P>&/
global /^$/ - substitute :[^>]$:&</P>:
Back to Part 4
Back to the index
You are viewing proxied material from gopher.black. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.