In this chapter, we will explore vi – the excellent Unix editor. There are many ways to edit text files in Unix; however, one of the best is using screen-oriented editors like vi who allow you to see context lines around a line that needs editing.
VIM, or Vi IMproved (commonly shortened to vim) is an improved version of the vi editor. It has rapidly grown in popularity because it can be used as both a command line and graphical interface text-editor with more features than standard vi that you might not find elsewhere like syntax highlighting and multitasking capabilities.
- It’s usually available on all the flavors of Unix system.
- Its implementations are very similar across the board.
- It requires very few resources.
- It is more user-friendly than other editors such as the ed or the ex.
VI Basic Commands for UNIX in Nutshell
Vi has 3 basic modes of operation: command (default), input, last line mode.
VI Editor Command mode
In command mode, you can run commands to search, copy, move, remove text.
VI Editor Input mode
In input mode, you can insert text into the file. Everything you type will be interpreted as text. many ways how to activate input mode (vi is case sensitive):
- i – Inserts text before the cursor.
- I – Inserts text at the beginning of the line.
- o – Opens a new blank line below the cursor.
- O – Opens a new blank line above the cursor.
- a – Appends text after the cursor.
- A – Appends text at the end of the line.
VI Editor Last line mode
To get into the last line mode type ‘:’ only from command mode. After type ‘:’ you will see a colon character appear at the beginning of the last line of your vi editor. It means vi is ready for type a “last line command”. To end vi type ‘q’ from last line mode.
You can return to command mode from input or last line mode pressing Esc.
Moving the Cursor
Key | Cursor movement |
w | Forward one word. |
b | Back one word. |
e | To the end of the current word. |
$ | To the end of the line. |
0(zero) | To the beginning of the line. |
^ | To the first non-whitespace character on the line. |
G | Goes to the last line of the file. |
IG | Goes to the first line of the file. |
Ctrl + F | Pages forward one screen. |
Ctrl + B | Pages back one screen. |
Ctrl + D | Scrolls down one-half screen. |
Ctrl + U | Scrolls up one-half screen. |
Ctrl + L | Refreshes the screen. |
Text-Deletion Commands
Command | Function |
R | Overwrites or replaces characters on the line at and to the right of cursor. To terminate press Esc. |
C | Changes or overwrites characters from cursor to the end of the line. |
s | Substitutes a string for a character at the cursor. |
x | Deletes a character at the cursor. |
dw | Deletes a word or part of the word to the right of the cursor. |
dd | Deletes the line containing the cursor. |
D | Deletes the line from the cursor to the right end of the line. |
:n, nd | Deletes lines n-n. Example :2,80d deletes lines 2-80. |
Text-Changing Commands
Command | Function |
cw | Changes or overwrites characters at the cursor location to the end of that word. |
r | Replaces the character at the cursor with one other character. |
J | Join the current line and the line below. |
xp | Transposes the character at the cursor and the character to the right of the cursor. |
~ | Changes the case of the letter, either uppercase or lowercase, at the cursor. |
u | Undo the previous command. |
. | Repeats the previous command. |
Text-Replacing Commands
Command | Function |
/string | Searches forward for the string from the cursor. |
?string | Searches backward for the string. |
n | Searches for the next occurrence of the string. Use this command after searching for a string. |
N | Searches for the previous occurrence of the string. Use this command after searching for a string. |
:%s/old/new/g | Searches for the old string and replaces it iwth the new string globally. |
Copy and Paste Commands
Command | Function |
yy | Yanks a copy of the line |
p | Puts yanked or deleted text under the line containing the cursor. |
P | Put |
:n,n co n | Copies lines n-n and puts them after line n. Example: 1, 5 co 8 copies lines 1-5 and puts them after line 8. |
:n,n m n | Moves lines n-n to line n. Example: 1,5 m 8 moves lines 1-5 to line 8. |
File Save and Quit Commands
Command | Function |
:w | Saves the file with changes by writing to the disk |
:w new_file | Writes the contents of the buffer to new_file. |
wq | Saves the changed file and quits editor vi. |
😡 | Saves the changed file and quits editor vi. |
ZZ | Saves the changed file and quits editor vi. |
:q! | Quits without saving changes. |
Customizing vi Session
Command | Function |
:set nu | Shows line numbers. |
:set nonu | Hides line numbers. |
:set ic | Instructs searches to ignore cases. |
:set noic | Instructs searches to be case-sensitive. |
set list | Display invisible characters. |
:set showmode | Display the current mode of operation. |
:set noshowmode | Turns off the mode of operation display. |
:set | Displays all the vi variables that are set. |
:set all | Display all vi variables and their values. |
Customizing vi Session
To automatic customization for all vi sessions do the following steps:
- Create a file in your home directory named ‘ . exrc’
- Enter any of the set variables into the ‘ . exrc’ file.
- Enter each ‘set variable’ command on one line.
Vi reads ‘exrc’ file every time before starting vi sessions.
Command | Function |
:set nu | Shows line numbers. |
:set nonu | Hides line numbers. |
:set ic | Instructs searches to ignore case. |
:set noic | Instructs searches to be case-sensitive. |
set list | Display invisible characters. |
:set showmode | Display the current mode of operation. |
:set noshowmode | Turns off the mode of operation display. |
:set | Displays all the vi variables that are set. |
:set all | Display all vi variables and their values. |