Command-Line Editing (Learning the Korn Shell, 2nd Edition)
Chapter 2. Command-Line Editing
Contents:
Enabling Command-Line Editing
The History File
Emacs Editing Mode
Vi Editing Mode
The hist Command
Finger Habits
It's always possible to make mistakes when you type at a computer
keyboard, but perhaps even more so when you are using a Unix shell. Unix
shell syntax is powerful, yet terse, full of odd characters, and not
particularly mnemonic, making it possible to construct command lines that
are as cryptic as they are complex. The Bourne and C shells exacerbate
this situation by giving you extremely limited ways of editing
your command lines.
In particular,
there is no way to recall a previous command line so that you can
fix a mistake. For example, in Chapter 7
we'll see complex command lines like:
eval cat \$srcname \| ccom \| optimize \| as \> \$objname
If you are an experienced Bourne shell user, undoubtedly you
know the frustration of having to retype lines like this.
You can use the backspace key to edit, but once you hit ENTER,
it's gone forever!
The C shell provides a small improvement via its history
mechanism, which provides a few very awkward ways of editing
previous commands. But there are more than a few people
who have wondered, "Why can't I edit my Unix command lines in the same
way I can edit text with an editor?"
This is exactly what the Korn shell allows you to do.
It has editing modes that allow you to edit
command lines with editing commands similar to those of the two most popular
Unix editors, vi and Emacs.[18]
It also provides a
much-extended analogue to the C shell history mechanism called
hist (for "history") that, among other things,
allows you to use your favorite editor directly for editing
your command lines.
[18]
For some unknown reason, the documentation on emacs-mode has been
removed from the ksh(1) manual pages on some Unix systems.
This does not mean, however,
that the mode doesn't exist or doesn't work properly.
In this chapter, we discuss features common to all of the Korn shell's
command-history facilities; then we deal with each such
facility in detail.
If you use vi or Emacs,
you may wish to read only the section
on the emulation mode for the one you use.[19]
If you use neither vi or Emacs
but are interested in learning one of the editing modes anyway,
we suggest emacs-mode, because it is more of a natural extension
of the minimal editing capability you get with the bare shell.
[19]
You will get the most out of these sections if you are already
familiar with the editor(s) in question. Good sources for
more complete information on the editors are
Learning the vi Editor by Linda Lamb and Arnold Robbins
and
Learning GNU Emacs by Debra Cameron, Bill Rosenblatt,
and Eric Raymond.
Both are published by O'Reilly & Associates.
We should mention up front that both emacs- and vi-modes
introduce the potential for clashes with control keys set up by
the Unix terminal interface. Recall the control keys shown in
Chapter 1 in Table 1-7 and
the sample stty command output.
The control keys shown there override their functions in the
editing modes.
During the rest of this chapter, we warn you when an editing
command clashes with the default setting of a
terminal-interface control key. But if you (or your system administrator)
choose to customize your terminal interface, as we show in
Chapter 8, you're on your own as far as the editing
modes are concerned.
2.1. Enabling Command-Line Editing
There are two ways of entering either editing mode.
First, you can set your editing mode by using the environment variable
VISUAL. The Korn shell checks to see if this variable ends with
vi
or macs.[20]
An excellent way to set VISUAL is to put a line like the following in your .profile or environment file:
[20]
GNU Emacs is sometimes installed as gmacs or gnumacs.
VISUAL=$(whence emacs)
or
VISUAL=$(whence vi)
As you will find out in Chapter 3 and Chapter 4,
the whence
built-in command takes the name of another command as its argument and
writes the command's full pathname on
the standard output; the form $(command)
returns the standard output generated by command as a
string value. Thus, the line above finds out
the full pathname of your favorite editor and stores it in the
environment variable VISUAL. The advantage of
this code is that it is portable to other systems, which may have
the executables for editors stored in different directories.
The second way of selecting an editing mode is to
set the option explicitly with the set -o command:
set -o emacs
or
set -o vi
vi users may wish to add:
set -o viraw
along with set -o vi. This enables TAB completion
in recent versions of ksh93.
The additional overhead, particularly on single-user systems, is nominal
and, in any case, is no worse than that of emacs-mode.
(Starting with ksh93n, the viraw
option is automatically enabled when you use vi-mode.)
You will find that the vi and emacs editing modes
are good at emulating the basic commands of these editors,
but not advanced features; their main purpose is to let you transfer
"finger habits" from your favorite editor to the shell. hist is a powerful
facility; it is mainly meant to supplant C shell history and as an
"escape hatch" for users of editors other than vi or Emacs.
Therefore the section on hist is recommended mostly to C shell
users and those who don't use either standard editor.
Before diving into the details, it's worth mentioning
two other points that apply to both editing modes:
ksh
indicates that a line is wider than your screen
by marking the last column of the visible line with a
special character: < indicates that there is more
text on the left side of what you currently see, >
indicates there is more text to the right of what you see, and
* indicates there is text on both sides of
what is currently visible.
$ print this is a very long line that just runs on and >
Customization of the ksh93 editing modes is possible
but requires knowledge of advanced features we haven't covered yet.
See Chapter 10 for the details.[21]
[21]
The public domain Korn shell, bash, and zsh
have editing modes that are customizable, but in a different way from ksh93.
See Appendix A.
1.9. Special Characters and Quoting2.2. The History File
Copyright © 2003 O'Reilly & Associates. All rights reserved.
Wyszukiwarka
Podobne podstrony:
ch02ch02ch02 (7)ch02ch02ch02ch02ch02ch02ch02ch02ch02 (17)ch02ch02Ch02 The Fed or Absorptive Statech02ch02ch02ch02 (2)więcej podobnych podstron