现在的位置: 首页 > 综合 > 正文

UNIX: vi Editor

2018年05月13日 ⁄ 综合 ⁄ 共 14209字 ⁄ 字号 评论关闭

zz http://www.ccsf.edu/Pub/Fac/vi.html

General Introduction

The vi editor (short for visual editor) is a screen editor which isavailable on almost all Unix systems. Once you have learned vi, you will findthat it is a fast and powerful editor. vi has no menus but instead usescombinations of keystrokes in
order to accomplish commands. If you are justbeginning to learn Unix, you might find the Pico editor easier to use (mostcommand options are displayed at the bottom of the screen). If you use thePine email application and have composed or replied to a message
you haveprobably already used Pico as it is used for text entry. For more informationplease refer to thePine/Pico page.

Starting vi

To start using vi, at the Unix prompt type vi followed by afile name. If you wish to edit an existing file, type in its name; if you arecreating a new file, type in the name you wish to give to the new file.

%vi filename

Then hit Return. You will see a screen similar to the one below whichshows blank lines with tildes and the name and status of the file.

~

~

"myfile" [New file]

vi's Modes and Moods

vi has two modes: the command mode and the insert mode. It isessential that you know which mode you are in at any given point in time. Whenyou are in command mode, letters of the keyboard will be interpreted ascommands. When you are in insert mode
the same letters of the keyboard willtype or edit text. vi always starts out in command mode. When you wish tomove between the two modes, keep these things in mind. You can typeito enter the insert mode. If you wish to leave insert mode and
return to thecommand mode, hit theESC key. If you're not sure where you are, hitESC a couple of times and that should put you back in commandmode.

General Command Information

As mentioned previously, vi uses letters as commands. It isimportant to note that in general vi commands:

  • are case sensitive - lowercase and uppercase command letters do differentthings
  • are not displayed on the screen when you type them
  • generally do not require a Return after you type thecommand.

You will see some commands which start with a colon (:).These commands areex commands which are used by the
ex editor.ex is the true editor which lies underneath vi -- in other words, vi isthe interface for the ex editor.

Entering Text

To begin entering text in an empty file, you must first change fromthe command mode to the insert mode. To do this, type the letteri.When you start typing, anything you type will be entered into the file. Type afew short lines and
hitReturn at the end of each of line. Unlike wordprocessors, vi does not use word wrap. It will break a line at the edge of thescreen. If you make a mistake, you can use the Backspace key to remove yourerrors. If the Backspace key doesn't
work properly on your system, try usingthe Ctrl h key combination.

Cursor Movement

You must be in command mode if you wish to move the cursor toanother position in your file. If you've just finished typing text, you'restill in insert mode and will need to pressESC to return to the commandmode.

Moving One Character at a Time

Try using your direction keys to move up, down, left and right inyour file. Sometimes, you may find that the direction keys don't work. Ifthat is the case, to move the cursor one character at the time, you may use theh,j,
k, and l keys. These keys move you in thefollowing directions:

h	left one space		l	right one space
j	down one space		k	up one space

If you move the cursor asfar as you can in any direction, you may see a screen flash or hear a beep.

Moving among Words and Lines

While these four keys (or your direction keys) can move you justabout anywhere you want to go in your file, there are some shortcut keys thatyou can use to move a little more quickly through a document. To move morequickly among words, you might
use the following:

w	moves the cursor forward one word 
b	moves the cursor backward one word (if in the middle of a 
 	word, b will move you to the beginning of the current word).
e	moves to the end of a word.

To build on this further, you canprecede these commands with a number for greater movement. For example, 5wwould move you forward five words; 12b would move you backwards twelve words.[You can also use numbers with the commands mentioned earlier. For example,
5jwould move you down 5 characters.]

Command Keys and Case

You will find when using vi that lower case and upper case commandkeys are interpreted differently. For example, when using the lower casew,b, and
e commands, words will be defined by a space ora punctuation mark. On the other hand,W,
B, and Ecommands may be used to move between words also, but these commands ignorepunctuation.

Shortcuts

Two short cuts for moving quickly on a line include the $and the0 (zero) keys. The
$ key will move you to the end of aline, while the0 will move you quickly to the beginning of a line.

Screen Movement

To move the cursor to a line within your current screen use the followingkeys:

H	moves the cursor to the top line of the screen.
M	moves the cursor to the middle line of the screen.
L	moves the cursor to the last line of the screen.

To scroll through the file and see other screens use:


ctrl-f	scrolls down one screen
ctrl-b	scrolls up one screen
ctrl-u	scrolls up a half a screen
ctrl-d	scrolls down a half a screen

Two other useful commands for moving quickly from one end to the other of adocument areG to move to the end of the file and
1G to move tothe beginning of the file. If you precedeG with a number, you can moveto a specific line in the document (e.g. 15G would move you to line15).

Moving by Searching

One method for moving quickly to a particular spot in your file isto search for specific text. When you are in command mode, type a/followed the text you wish to search for. When you press
Return,the cursor will move to the first incidence of that string of text. You canrepeat the search by typingn or search in a backwards direction byusing
N.

Basic Editing

To issue editing commands, you must be in command mode. Asmentioned before, commands will be interpreted differently depending uponwhether they are issued in lower or upper case. Also, many of the editingcommands can be preceded by a number to indicate
a repetition of thecommand.

Deleting (or Cutting) Characters, Words, and Lines

To delete a character, first place your cursor on that character.Then, you may use any of the following commands:


x	deletes the character under the cursor.
X	deletes the character to the left of your cursor.
dw	deletes from the character selected to the end of the word.
dd	deletes all the current line.
D	deletes from the current character to the end of the line.

Preceding the command with a number will delete multiple characters. Forexample,
10x
will delete the character selected and the next 9characters;
10X
will delete the 10 characters to the left of thecurrently selected character. The command5dw will delete 5 words,while
4dd deletes four lines.

Pasting Text using Put

Often, when you delete or cut text, you may wish to reinsert it inanother location of the document. The Put command will paste in the lastportion of text that was deleted since deleted text is stored in a buffer. Touse this command, place the cursor
where you wish the deleted text to appear.Then use p to reinsert the text. If you are inserting a line orparagraph use the lower casep to insert on the line below the cursor orupper case
P to place in on the line above the cursor.

Copying Text with Yank

If you wish to make a duplicate copy of existing text, you may usethe yank and put commands to accomplish this function. Yank copies theselected text into a buffer and holds it until another yank or deletion occurs.Yank is usually used in combination
with a word or line object such as the onesshown below:


yw	copies a word into a buffer (7yw copies 7 words)
yy	copies a line into a buffer (3yy will copy 3 lines)

Once the desired text is yanked, place the cursor in the spot in which you wishto insert the text and then use the put command (p for line below orPfor line above) to insert the contents of the buffer.

Replacing or Changing Characters, Words, and Lines

When you are using the following commands to replace text, you willbe put temporarily into insert mode so that you can change a character, word,line, or paragraph of text.


r	replaces the current character with the next character you enter/type.
   	Once you enter the character you are returned to command mode.
R	puts you in overtype mode until you hit ESC which will then return
   	you to command mode.
cw	changes and replaces the current word with text that you type.  A dollar
   	sign marks the end of the text you're changing.  Pressing ESC when you
   	finish will return you to command mode.

Inserting Text

If you wish to insert new text in a line, first position the cursorto the right of where you wish the inserted text to appear. Typei toget into insert mode and then type in the desired text (note that the text isinserted before
the cursor). PressESC to return to commandmode.

Inserting a Blank Line

To insert a blank line below the line your cursor is currentlylocated on, use theo key and then hit
ESC to return to thecommand mode . UseO to insert a line above the line the cursor islocated on.

Appending Text

You can use the append command to add text at any place in yourfile. Append (a) works very much like Insert (i) except that itinsert textafter the cursor rather than before it. Append is probablyused most
often for adding text to the end of a line. Simply place your cursorwhere you wish to append text and pressa.
Once you've finishedappending, press ESC to go back to command mode.

Joining Lines

Since vi does not use automatic word wrap, it is not unusual inediting lines to end up with lines that are too short and that might beimproved if joined together. To do this, place your cursor on the first lineto be joined and typeJ.
As with other commands, you can precedeJ with a number to join multiple lines (4J joins 4lines).

Undoing

Be sure to remember this command. When you make a mistake you canundo it.DO NOT move the cursor from the line where you made thechange. Then try using one of the following two commands:


u	undoes the last change you made anywhere in the file.  Using u again 
   	will "undo the undo".
U	undoes all recent changes to the current line.  You can not have moved
	from the line to recover the original line.

Closing and Saving Files

When you edit a file in vi, you are actually editing a copy of thefile rather than the original. The following sections describe methods youmight use when closing a file, quitting vi, or both.

Quitting and Saving a File

The command ZZ (notice that it is in uppercase) will allowyou to quit vi and save the edits made to a file. You will then return to aUnix prompt. Note that you can also use the following commands:


:w	to save your file but not quit vi (this is good to do periodically in
	case of machine crash!).
:q	to quit if you haven't made any edits.
:wq	to quit and save edits (basically the same as ZZ).

Quitting without Saving Edits

Sometimes, when you create a mess (when you first start using vithis is easy to do!) you may wish to erase all edits made to the file andeither start over or quit. To do this, you can choose from the following twocommands:


:e!	reads the original file back in so that you can start over.
:q!	wipes out all edits and allows you to exit from vi.

More about Combining Commands, Objects, and Numbers

Now that you've learned some basic vi commands you might wish toexpand your skills by trying some fancy combination steps. Some commands aregenerally used in combination with a text object. We've already seen someexamples of this. For example, when
you use the command dw to delete aword, that combines the delete (d) command with the word (w) textobject. When you wish to delete multiple words, you might add a number to thiscombination. If you wished to
delete 2 words you might use 2dw ord2w. Either of these combinations would work. So, as you can see, thegeneral format for a command can be

(number) (command) (text object) or (command)(number) (text object)

You might wish to try out some of the following combinations of commandsand objects:

Command       Text Object
d (delete)	w (word to the left)
y (yank/copy)	b (word to the right or backward)
c (change)	e (end of word)
		H (top of the screen)
		L (bottom of the screen)
		M (middle of the screen)
		0 (zero - first character on a line)
		$ (end of a line)
		( (previous sentence)
		) (next sentence)
		[ (previous section)
		] (next section)

Repeating a Command

If you are doing repetitive editing, you may wish to use the samecommand over and over. vi will allow you to use the dot (.) to repeat the lastbasic command you issued. If for example, you wished to deleted several lines,you could usedd
and then . (dot) in quick succession to delete afew lines.

A Quick Word about Customizing Your vi Environment

There are several options that you can set from within vi that canaffect how you use vi. For example, one option allows you to set a rightmargin that will then force vi to automatically wrap your lines as you type.To do this, you would use a variation
of the :set command. The:set command can be used to change various options in vi. In theexample just described, you could, while still in vi, type:setwrapmargin=10
to specify that you wish to have a right margin of 10.Another useful option is:set number. This command causes vi to displayline numbers in the file you are working on.

Other Options

To view a listing of other options, you could type :set all.To view only those options which are currently in effect, you can typeset: by itself.Options that you set while in a vi session willapply
during that session only. To make permanent changes to your vienvironment, you could edit your .exrc file. However, you should not edit thisfile unless you knowwhat you are doing!

Useful vi Commands

Cut/Paste Commands:

x 		delete one character (destructive backspace)
dw		delete the current word (Note: ndw deletes n numbered words)
dd 		delete the current line (Note: ndd deletes n numbered lines)
D		delete all content to the right of the cursor
d$		same as above
:u		undo last command
p,P		paste line starting one line below/above current cursor location
J		combine the contents of two lines 
"[a-z]nyy   	yank next n lines into named buffer [a-z] 
"[a-z]p/P	place the contents of selected buffer below/above the current line

Extensions to the Above Commands:

:3,18d		delete lines 3 through 18
16,25m30	move lines 16 through 25 to after line 30
23,29co62	copy specified lines and place after line 62

Cursor Relocation commands:

:[n]		goto line [n]
shift g		place cursor on last line of text
h/l/j/k		move cursor left, right, down and up 
^f/^b		move forward, backward in text, one page
^u/^d		move up, down one half page
$		move to end of line
0		move to beginning of line

Extensions to the Above:

b 		move backwards one word (Note: nb moves back n number of words)
e		move to end of current word
(		move to beginning of curent block
)		move to the end of current block

Searching and Substitution commands:

/ [string]	search forward for string
? [string]	search backwards for string
n		repeat last search
N		repeat search in opposite direction
cw		change the contents of the current word, (use ESC to stop
		replacement mode)
c$		Replace all content to the right of cursor (exit replacement
		mode with ESC)
c0		Replace all content to the left of cursor (exit with ESC)
:1,$s/s1/s2/g	(Yow!) global replacement of string1 with string2 
r 		replace current character with next character typed

Entering the Insert Mode:

i		Begin inserting text at current cursor location 
I		Begin inserting text at the beginning of the current line
a		Begin appending text, one character to the right of current
		cursor location
A		Begin appending text at the end of the current line
o/O		Begin entering text one line below\above current line
ESC		Exit insertion mode and return to command mode

Exiting and Entering VI

ZZ		save file and exit VI
:wq		same as above
:e!		return to last saved version of current file
:q		quit without save, (Note :q! is required if changes have been made)
:w		write without exit (:w! to force write)

Fancy Stuff:

:1,10w file   		write lines 1 through 10 to file newfile
:340,$w >> file		write lines 340 through the end of the file and append
			to file newfile
:sh			escape temporarily to a shell
^d			return from shell to VI
:![command]		execute UNIX command without leaving VI
:r![command]		read output of command into VI
:r[filename]		read filename into VI
:$r newfile		read in newfile and attach at the end of current document
:r !sort file		read in contents of file after it has been passed through
			the UNIX sort
:n			open next file (works with wildcard filenames,
			ex: vi file*)
:^g			list current line number
:set number		show line numbers
:set showinsert		show flag ("I") at bottom of screen when in insert mode
:set all		display current values of VI variables
:set ai			set autoindent; after this enter the insert mode and
			tab, from this point on VI will indent each line to
			this location.  Use ESC to stop the indentations.
^T 			set the autoindent tab one tab stop to the right 
^D 			set the autoindent tab one stop to the left
:set tabstop=n		sets default tab space to number n
>>			shift contents of line one tab stop to the right
<<			shift contents of line one tab stop to the left		

抱歉!评论已关闭.