Text Editors
Unix Editors
-
What is a text editor?
-
A text editor is a program which enables you to create and manipulate character
data (text) in a computer file.
-
A text editor is not a word processor although some text editors do include
word processing facilities.
-
Text editors often require "memorizing" commands in order to perform editing
tasks. The more you use them, the easier it becomes. There is a "learning
curve" in most cases though.
-
There are several standard text editors available on most UNIX systems:
-
ed - standard line editor
-
ex - extended line editor
-
vi - a visual editor; full screen; uses ed/ex line-mode commands for global
file editing
-
sed - stream editor for batch processing of files
-
In addition to these, other local "favorites" may be available:
-
emacs - a full screen interactive editor and much more
-
nedit - another GUI style text editor similar to emacs.
-
pico - an easy "beginner's" editor
Each of these editors can be invoked by typing their name at the prompt,
along with the file name. For example, to invoke nedit we issue the command:
nedit filename
or
nc filename
The Standard Display Editor - vi
vi is the standard editor available on every UNIX system. While it appears
intimidating at first, it is extremely powerful and universal. Hence familiarity
with it is important. A nice way to get started with learning this editor
is by using the "vitutor". It can be copied to your home directory from
either of the following directories:
-
/nfs/cis/phd/asb2718/vitutor
-
/nfs/cis/staff/rvrpci/pub/vitutor
Copy files, Readme, tutor.vi and vitutor.n. Out of these, tutor.vi is the
main tutor. However go through the Readme and vitutor.n first. Type
vi tutor.vi
at the prompt to begin the tutor. The instructions are in the file and
follow them as you read along. Note: It might be a good idea to copy the
file tutor.vi to some other file and work with it instead as you would
be making changes to it as you go along.
-
vi supplies commands for:
-
inserting and deleting text
-
replacing text
-
moving around the file
-
finding and substituting strings
-
cutting and pasting text
-
reading and writing to other files
-
vi uses a "buffer"
-
While using vi to edit an existing file, you are actually working on a
copy of the file that is held in a temporary buffer in your computer's
memory.
-
If you invoked vi with a new filename, (or no file name) the contents of
the file only exist in this buffer.
-
Saving a file writes the contents of this buffer to a disk file, replacing
its contents. You can write the buffer to a new file or to some other file.
-
You can also decide not to write the contents of the buffer, and leave
your original file unchanged.
-
vi operates in two different "modes":
-
Command mode
-
vi starts up in this mode
-
Whatever you type is interpreted as a command - not text to be inserted
into the file.
-
The mode you need to be in if you want to "move around" the file.
-
Insert mode
-
This is the mode you use to type (insert) text.
-
There are several commands that you can use to enter this mode.
-
Once in this mode, whatever you type is interpreted as text to be included
in the file. You can not "move around" the file in this mode.
-
Must press the ESC (escape) key to exit this mode and return to command
mode.
vi Commands
vi filename - The filename can be the name of an
existing file or the name of the file
you want to create.
view filename - Starts vi in "read only" mode. Allows
you to look at a file without the risk
of altering its contents.
Exiting vi
:q - quit - if you have made any changes, vi
will warn you of this, and you'll need
to use one of the other quits.
:w - write edit buffer to disk
:w filename - write edit buffer to disk as filename
:wq - write edit buffer to disk and quit
ZZ - write edit buffer to disk and quit
:q! - quit without writing edit buffer to disk
Positioning within text
By character
left arrow - left one character
right arrow - right one character
backspace - left one character
space - right one character
h - left one character
l - right one character
By word
w - beginning of next word
nw - beginning of nth next word
b - back to previous word
nb - back to nth previous word
e - end of next word
ne - end of nth next word
By line
down arrow - down one line
up arrow - up one line
j - down one line
k - up one line
+ - beginning of next line down
- - beginning of previous line up
0 - first column of current line (zero)
^ - first character of current line
$ - last character of current line
By block
( - beginning of sentence
) - end of sentence
{ - beginning of paragraph
} - end of paragraph
By screen
CTRL-f - forward 1 screen
CTRL-b - backward 1 screen
CTRL-d - down 1/2 screen
CTRL-u - up 1/2 screen
H - top line on screen
M - mid-screen
L - last line on screen
Within file
nG - line n within file
1G - first line in file
G - last line in file
Inserting text
a - append text after cursor *
A - append text at end of line *
i - insert text before cursor *
I - insert text at beginning of line *
o - open a blank line after the current
line for text input *
O - open a blank line before the current
line for text input *
* Note: hit ESC (escape) key when finished inserting!
Deleting text
x - delete character at cursor
dh - delete character before cursor
nx - delete n characters at cursor
dw - delete next word
db - delete previous word
dnw - delete n words from cursor
dnb - delete n words before cursor
d0 - delete to beginning of line
d$ - delete to end of line
D - delete to end of line
dd - delete current line
d( - delete to beginning of sentence
d) - delete to end of sentence
d{ - delete to beginning of paragraph
d} - delete to end of paragraph
ndd - delete n lines (start at current line)
Changing text
cw - replace word with text *
cc - replace line with text *
c0 - change to beginning of line *
c$ - change to end of line *
C - change to end of line *
c( - change to beginning of sentence *
c) - change to end of sentence *
c{ - change to beginning of paragraph *
c} - change to end of paragraph *
r - overtype only 1 character
R - overtype text until ESC is hit *
J - join two lines
* Note: hit ESC (escape) key when finished changing!
Copying lines
yy - "yank": copy 1 line into buffer
nyy - "yank": copy n lines into buffer
p - put contents of buffer after current
line
P - put contents of buffer before current
line
Moving lines (cutting and pasting)
ndd - delete n lines (placed in buffer)
p - put contents of buffer after current
line
P - put contents of buffer before current
line
Searching / Substituting
/str - search forward for str
?str - search backward for str
n - find next occurrence of current string
N - repeat previous search in reverse
direction
The substitution command requires a line range
specification. If it is omitted, the default
is the current line only. The examples below
show how to specify line ranges.
:s/old/new - substitute new for first occurrence
of old in current line
:s/old/new/g - substitute new for all occurrences
of old in current line
:1,10s/old/new - substitute new for first occurrence
of old in lines 1 - 10
:.,$s/old/new - substitute new for first occurrence
of old in remainder of file
:.,+5s/old/new - substitute new for first occurrence
of old in current line and next 5 lines
:.,-5s/old/new - substitute new for first occurrence
of old in current line and previous
5 lines
:%s/old/new/g - substitute new for all occurrences
of old in the entire file
:%s/old/new/gc - interactively substitute new for all
occurrences of old - will prompt for
y/n response for each substitution.
Miscellaneous commands
u - undo the last command (including undo)
. - repeat last command
xp - swap two adjacent characters
m[a-z] - set a marker (a - z)
'[a-z] - go to a previously set marker (a - z)
:!command - execute specified UNIX command
:r filename - read/insert contents of filename after
current line.
:1,100!fmt - reformat the first 100 lines
:!fmt - reformat the entire file
vi Options
-
You can change the way vi operates by changing the value of certain options
which control specific parts of the vi environment.
-
To set an option during a vi session, use one of the commands below as
required by the option:
:set option_name
:set option_name=value
Some examples of the more common options are described below.
:set all - shows all vi options in effect
:set ai - set autoindent - automatically indents
each line of text
:set noai - turn autoindent off
:set nu - set line numbering on
:set nonu - turn line numbering off
:set scroll=n - sets number of lines to be scrolled
to n. Used by screen scroll commands.
:set sw=n - set shiftwidth to n. Used by autoindent
option.
:set wm=n - set wrapmargin to n. Specifies number
of spaces to leave on right edge of the
screen before wrapping words to next
line.
:set showmode - reminds you when you are inserting
text.
:set ic - ignore case of characters when
performing a search.
Options can be set permanently by putting them in a file called .exrc in
your home directory. A sample .exrc file appears below. Note that you do
not need the colon (:) as part of the option specification when you put
the commands in a .exrc file. Also note that you can put them all on one
line.
set nu ai wm=5 showmode ic
pico: One Alternative to vi
-
pico is a simple text editor based upon the Pine Message/mail System. It
is far easier to use than vi, with the tradeoff that is isn't as powerful.
-
Editing commands are entered using control-key combinations. The most important
commands are displayed at the bottom of the screen, facilitating ease of
use.
-
To start pico, simply use the command "pico" followed by the name of the
file you wish to edit. If the file exists, pico will start with that file.
If it does not exist, then pico will assume that it is a new file.
-
The basic commands provided by pico include:
CTRL-G - get help
CTRL-X - exit
CTRL-O - write out to a file
CTRL-J - justify text
CTRL-R - read a file
CTRL-W - where is (search)
CTRL-Y - previous page
CTRL-V - next page
CTRL-^ - mark cursor position as start of selected text
CTRL-K - cut text
CTRL-U - uncut text / paste
CTRL-T - check spelling
CTRL-C - cursor position information
CTRL-F - move forward a character
CTRL-B - move backward a character
CTRL-P - move to the previous line
CTRL-N - move to the next line
CTRL-A - move to the beginning of the current line
CTRL-E - move to the end of the current line
CTRL-L - refresh the display
CTRL-D - delete the character at the cursor position
CTRL-I - insert a tab at the current cursor position
Note that cursor positioning can also be accomplished by
using the up, down, right and left arrow keys.
A few additional comments/notes:
-
The manner in which lines longer than the display width are dealt is not
immediately obvious. Lines that continue beyond the edge of the display
are indicated by a '$' character at the end of the line. Long lines are
scrolled horizontally as the cursor moves through them.
-
Context sensitive help is a feature included with pico.
-
A file browser is included as part of the "write" and "read" file commands.
For additional details, see the pico man page.