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>:
       
       
 (DIR) Back to Part 4
 (DIR) Back to the index