Editing files

Sending text through a filter

You can send some or all of the contents of the current file through a program that acts as a filter, transforming the contents of the current file. For example, to use the tr command to translate the current paragraph into uppercase:

  1. Enter command mode by pressing <Esc>, if necessary.

  2. Go to the beginning of the first line of the paragraph.

  3. Type the following characters:

    !} tr '[a-z]' '[A-Z]'

The command ! tells vi to filter all the text from the current cursor position to the position indicated by the subsequent movement command (in this case ``}'', the command to move to the end of the paragraph), through the program tr with the arguments '[a-z]' '[A-Z]'. tr translates its input, defined by the first wildcard expression, into an output file defined by the second expression. The output from tr is then substituted for the input.

In general, you can use any filter in this way:

! movement filter <Enter>

An exclamation point typed in command mode introduces a filter command. movement is a vi command to move the cursor to the end of the block of text you want to feed through filter. The cursor jumps to the bottom line of the screen when you enter the movement command, and a ``!'' prompt appears; vi waits for you to enter the filter command and press <Enter>. Note that the cursor movement must refer to a block of text larger than one word; the commands w and e are not acceptable cursor movements.

Another common usage is to spell-check a sentence using spell, and replace it with a list of all the unidentified words it contains:

  1. Enter command mode by pressing <Esc>, if necessary.

  2. Move to the start of the sentence by pressing 0.

  3. Enter the command:

    !)spell <Enter>

The ) command moves the cursor to the end of the current sentence. The !) command selects the text from the current cursor position to the end of the sentence and sends it to the standard input of spell. The output from spell (all the words in the sentence that it cannot find in its dictionary) replaces the sentence and those below it with each mispelled word that is found. Retrieve the original sentence using the u (for Undo) command immediately. For example:
   When looking for occurences of spelling mistakes
Applying the above procedure replaces this sentence with the following:
The escape filter can be used with any command that reads from the standard input. For example, use wc to find the number of words in a file; go to the top of the document and issue the command !Gwc -w. The document is replaced by a word count. Press u to get your document back again.
Next topic: Defining abbreviations
Previous topic: Running other programs from inside vi

© 2003 Caldera International, Inc. All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003