vi Editor in UNIX

The default editor that comes with the UNIX operating system is called vi (visual editor). Using vi editor, we can edit an existing file or create a new file from scratch. we can also use this editor to just read a text file.
Syntax:

vi filename


Input:


Output:

Modes of Operation in vi editor There are three modes of operation in vi:
vieditor

  • Command Mode: When vi starts up, it is in Command Mode. This mode is where vi interprets any characters we type as commands and thus does not display them in the window. This mode allows us to move through a file, and to delete, copy, or paste a piece of text.
    To enter into Command Mode from any other mode, it requires pressing the [Esc] key. If we press [Esc] when we are already in Command Mode, then vi will beep or flash the screen.
  • Insert mode: This mode enables you to insert text into the file. Everything that’s typed in this mode is interpreted as input and finally, it is put in the file. The vi always starts in command mode. To enter text, you must be in insert mode. To come in insert mode you simply type i. To get out of insert mode, press the Esc key, which will put you back into command mode.
  • Last Line Mode(Escape Mode): Line Mode is invoked by typing a colon [:], while vi is in Command Mode. The cursor will jump to the last line of the screen and vi will wait for a command. This mode enables you to perform tasks such as saving files, executing commands.

Starting the vi Editor:

There are following way you can start using vi editor :

Commands and their Description

  • vi filename: Creates a new file if it already not exist, otherwise opens existing file.
  • vi -R filename : Opens an existing file in read only mode.
  • view filename : Opens an existing file in read only mode.

Moving within a File(Navigation):
To move around within a file without affecting text must be in command mode (press Esc twice). Here are some of the commands can be used to move around one character at a time.

Commands and their Description

  • k : Moves the cursor up one line.
  • j : Moves the cursor down one line.
  • h : Moves the cursor to the left one character position.
  • l : Moves the cursor to the right one character position.
  • 0 or | : Positions cursor at beginning of line.
  • $ : Positions cursor at end of line.
  • W : Positions cursor to the next word.
  • B : Positions cursor to previous word.
  • ( : Positions cursor to beginning of current sentence.
  • ) : Positions cursor to beginning of next sentence.
  • H : Move to top of screen.
  • nH : Moves to nth line from the top of the screen.
  • M : Move to middle of screen.
  • L : Move to bottom of screen.
  • nL : Moves to nth line from the bottom of the screen.
  • colon along with x : Colon followed by a number would position the cursor on line number represented by x.

Control Commands(Scrolling): There are following useful commands which can used along with Control Key:

Commands and their Description:

  • CTRL+d : Move forward 1/2 screen.
  • CTRL+f : Move forward one full screen.
  • CTRL+u : Move backward 1/2 screen.
  • CTRL+b : Move backward one full screen.
  • CTRL+e : Moves screen up one line.
  • CTRL+y : Moves screen down one line.
  • CTRL+u : Moves screen up 1/2 page.
  • CTRL+d : Moves screen down 1/2 page.
  • CTRL+b : Moves screen up one page.
  • CTRL+f : Moves screen down one page.
  • CTRL+I : Redraws screen.

Editing and inserting in Files(Entering and Replacing Text): To edit the file, we need to be in the insert mode. There are many ways to enter insert mode from the command mode.

  • I : Inserts text before current cursor location.
  • I : Inserts text at beginning of current line.
  • A : Inserts text after current cursor location.
  • A : Inserts text at end of current line.
  • O : Creates a new line for text entry below cursor location.
  • O : Creates a new line for text entry above cursor location.
  • R : Replace single character under the cursor with the next character typed.
  • R : Replaces text from the cursor to right.
  • S : Replaces single character under the cursor with any number of characters.
  • S :Replaces entire line.

Deleting Characters: Here is the list of important commands which can be used to delete characters and lines in an opened file.

  • X : Deletes the character under the cursor location.
  • X : Deletes the character before the cursor location.
  • Dw : Deletes from the current cursor location to the next word.
  • d^ : Deletes from current cursor position to the beginning of the line.
  • d$ : Deletes from current cursor position to the end of the line.
  • Dd : Deletes the line the cursor is on.

Copy and Past Commands: Copy lines or words from one place and paste them on another place by using the following commands.

  • Yy : Copies the current line.
  • 9yy : Yank current line and 9 lines below.
  • p : Puts the copied text after the cursor.
  • P : Puts the yanked text before the cursor.

Save and Exit Commands of the ex Mode : Need to press [Esc] key followed by the colon (:) before typing the following commands:

  • q : Quit
  • q! : Quit without saving changes i.e. discard changes.
  • r fileName : Read data from file called fileName.
  • wq : Write and quit (save and exit).
  • w fileName : Write to file called fileName (save as).
  • w! fileName : Overwrite to file called fileName (save as forcefully).
  • !cmd : Runs shell commands and returns to Command mode.

Searching and Replacing in (ex Mode): vi also has powerful search and replace capabilities. The formal syntax for searching is:

:s/string 

For example, suppose we want to search some text for the string “geeksforgeeks” Type the following and press ENTER:

:s/geeksforgeeks

Input:

Output: finding the first match for “geeksforgeeks” in text will then be highlighted.

The syntax for replacing one string with another string in the current line is:

:s/pattern/replace/ 

Here “pattern” represents the old string and “replace” represents the new string. For example, to replace each occurrence of the word “geeks” in a line with “geeksforgeeks” type:

:s/geeksforgeeks/gfg/ 

Input:

Output:

The syntax for replacing every occurrence of a string in the entire text is similar. The only difference is the addition of a “%” in front of the “s”:

:%s/pattern/replace/ 

Thus repeating the previous example for the entire text instead of just for a single line would be:

:%s/gfg/geeksforgeeks/ 

Reference: http://www.linfo.org/vi/



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.