Table des matières
Last updated on: 2020/01/30 03:27
The VIsual Editor
Presentation
The VIsual Editor (a.k.a. VI) is a powerful text editor that operates in three basic modes :
- Command
- Ex-mode
- Insert
In Command mode it is possible to use keys such as i to insert text.
In Ex-mode mode, all commands sent to VI must be preceded by the : key.
In Insert mode VI can be used to :
- edit text,
- add text,
- search for text,
- copy text,
- paste text,
- cut text,
- replace existing text.
Creating, Opening and Closing files with VI
Commands
Command | Description |
---|---|
vi filename | Edit filename starting at line 1 |
vi | Edit a new file starting at line 1 |
vi -r filename | Recover filename that was being edited when system crashed |
view filename | Open filename in read-only mode |
:wq | Quit vi, writing out modified file to file named in original invocation and modify the mtime |
:x | Quit vi, writing out modified file to file named in original invocation without modifying the mtime if the file was not modified |
:q | Quit (or exit) vi if the file was not modified or quit view |
u | Undo last command |
U | Undo the modifications to the current line |
:q! | Quit VI even though latest changes have not been saved |
LAB #1 - Creating a new file with VI
Copy lines 1 through 25 below:
This is line 1 This is line 2 This is line 3 This is line 4 This is line 5 This is line 6 This is line 7 This is line 8 This is line 9 This is line 10 This is line 11 This is line 12 This is line 13 This is line 14 This is line 15 This is line 16 This is line 17 This is line 18 This is line 19 This is line 20 This is line 21 This is line 22 This is line 23 This is line 24 This is line 25
Create a new file called vitext using vi:
trainee@debian8:~$ vi vitext
To do - Use the i key to change to insert mode. If you are using a terminal undre Linux to connect to your virtual machine, click the center button (wheel) of your mouse to paste lines 1 through 25. If you are using putty under Windows™ to connect to your virtual machine, click the right button of your mouse to paste lines 1 through 25. Hit the Escape key to move to Command mode. Now hit the : key followed by the X key to save the file and quit vi.
LAB #2 - Opening a file in read-only mode using view
Now open /home/trainee/vitext in read-only mode:
trainee@debian8:~$ view vitext
You will obtain a result similar to the following example:
This is line 1 This is line 2 This is line 3 This is line 4 This is line 5 This is line 6 This is line 7 This is line 8 This is line 9 This is line 10 This is line 11 This is line 12 This is line 13 This is line 14 This is line 15 This is line 16 This is line 17 This is line 18 This is line 19 This is line 20 This is line 21 This is line 22 This is line 23 This is line 24 This is line 25 ~ "vitext" [readonly] 25L, 391C
To do - Re-size your window so that you can see just the 25 numbered lines.
Important - Note the [readonly] statement on the last line.
LAB #3 - Opening a file in read-write mode using VI
Quit using the :q command and open the file in read-write mode :
trainee@debian8:~$ vi vitext
You will obtain a result similar to the following example :
This is line 1 This is line 2 This is line 3 This is line 4 This is line 5 This is line 6 This is line 7 This is line 8 This is line 9 This is line 10 This is line 11 This is line 12 This is line 13 This is line 14 This is line 15 This is line 16 This is line 17 This is line 18 This is line 19 This is line 20 This is line 21 This is line 22 This is line 23 This is line 24 This is line 25 "vitext" 25L, 391C 25,1 All
Important - Note that VI is launched in Command mode. Note that there are 25 lines and 391 characters.
The set Command
Commands
Command | Description |
---|---|
:set nu | Turns on line numbering |
:set number | Turns on line numbering |
:set nonu | Turns off line numbering |
:set nonumber | Turns off line numbering |
:set ic | Turns on independent case searching |
:set noic | Turns on case dependent searching |
LAB #4 - Turning on line numbering using set
Turn on line numbering with the command of your choice. You will obtain a result similar to the following example:
1 This is line 1 2 This is line 2 3 This is line 3 4 This is line 4 5 This is line 5 6 This is line 6 7 This is line 7 8 This is line 8 9 This is line 9 10 This is line 10 11 This is line 11 12 This is line 12 13 This is line 13 14 This is line 14 15 This is line 15 16 This is line 16 17 This is line 17 18 This is line 18 19 This is line 19 20 This is line 20 21 This is line 21 22 This is line 22 23 This is line 23 24 This is line 24 25 This is line 25 :set nu 25,1 All
1 This is line 1 2 This is line 2 3 This is line 3 4 This is line 4 5 This is line 5 6 This is line 6 7 This is line 7 8 This is line 8 9 This is line 9 10 This is line 10 11 This is line 11 12 This is line 12 13 This is line 13 14 This is line 14 15 This is line 15 16 This is line 16 17 This is line 17 18 This is line 18 19 This is line 19 20 This is line 20 21 This is line 21 22 This is line 22 23 This is line 23 24 This is line 24 25 This is line 25 :set number 25,1 All
Moving around within the file
Commands
Command | Description |
---|---|
h or ← or Backspace | Move cursor left one character |
j or ↓ or ↵ Enter | Move cursor down one line |
k or ↑ | Move cursor up one line |
l or → ou Space Bar | Move cursor right one character |
b | Move cursor back to beginning of preceding word |
w | Move cursor to beginning of next word |
e | Move cursor to the end of the current word |
H | Move cursor to top of screen |
M | Move cursor to middle of screen |
L | Move cursor to bottom of screen |
G or :$ | Move cursor to the last line of the file |
1G or :0 | Move cursor to first line in file |
27G | Move cursor to line 27 |
Ctrl+f | Move forward one screen |
Ctrl+d | Move down (forward) one half screen |
Ctrl+b | Move backward one screen |
Ctrl+u | Move up (back) one half screen |
To do - Test each of the above commands. When you have finished, position the cursor at beginning of line 13. In order to understand why the H, J, K and L keys are used as arrow keys, please see this page.
Inserting Text
Commands
Key(s) | Description |
---|---|
i | Insert text before cursor |
I | Insert text at beginning of current line |
a | Append text after cursor |
A | Append text to end of current line |
o | Open and put text in a new line below current line |
O | Open and put text in a new line above current line |
Escape | Returns the editor to Command mode |
LAB #5 - Inserting text
Insert a line under the line 13 using the o command. Note that you are now in Insert mode. Type the following text : Linux is super. You will obtain a result similar to the following example :
1 This is line 1 2 This is line 2 3 This is line 3 4 This is line 4 5 This is line 5 6 This is line 6 7 This is line 7 8 This is line 8 9 This is line 9 10 This is line 10 11 This is line 11 12 This is line 12 13 This is line 13 14 Linux is super 15 This is line 14 16 This is line 15 17 This is line 16 18 This is line 17 19 This is line 18 20 This is line 19 21 This is line 20 22 This is line 21 23 This is line 22 24 This is line 23 25 This is line 24 -- INSERT -- 14,15 Top
Warning - Do not change the size of the window. You only need to see the first 25 lines.
Switch back to Command mode using the Escape key and place the cursor on the last line of the screen using the L command. Move the cursor to the end of the line in Insert mode using the A command and once again type Linux is super. You will obtain a result similar to the following example :
1 This is line 1 2 This is line 2 3 This is line 3 4 This is line 4 5 This is line 5 6 This is line 6 7 This is line 7 8 This is line 8 9 This is line 9 10 This is line 10 11 This is line 11 12 This is line 12 13 This is line 13 14 Linux is super 15 This is line 14 16 This is line 15 17 This is line 16 18 This is line 17 19 This is line 18 20 This is line 19 21 This is line 20 22 This is line 21 23 This is line 22 24 This is line 23 25 This is line 24Linux is super -- INSERT -- 25,30 Top
Switch back to Command mode using the Escape key and move the cursor to the first line of the screen using the H command. Move the cursor to the third word by pressing the w key 3 times. Switch to Insert mode using the i key and type Linux is super. You will obtain a result similar to the following example :
1 This is line Linux is super1 2 This is line 2 3 This is line 3 4 This is line 4 5 This is line 5 6 This is line 6 7 This is line 7 8 This is line 8 9 This is line 9 10 This is line 10 11 This is line 11 12 This is line 12 13 This is line 13 14 Linux is super 15 This is line 14 16 This is line 15 17 This is line 16 18 This is line 17 19 This is line 18 20 This is line 19 21 This is line 20 22 This is line 21 23 This is line 22 24 This is line 23 25 This is line 24Linux is super -- INSERT -- 1,28 Top
Switch back to Commande mode using the Escape key and move the cursor to the first line of the screen using the H command.
Searching for Text
Commands
Key(s) | Description |
---|---|
/ string | Search forward for occurrence of string in text |
// | Search forward for next occurrence of string in text |
? string | Search backward for occurrence of string in text |
?? | Search backward for next occurrence of string in text |
n | Move to next occurrence of search string |
N | Move to next occurrence of search string in opposite direction |
:g/string/s//string1/g | Search and replace string by string1 |
LAB #6 - Searching for and replacing text
Search the text for the string super by using the /super command. Now search the next two occurrences using the // command twice. Your cursor should now be at the beginning of the last word on the last line.
Now search backwards for the same string using the ?super command. Your cursor should now be on the line in the middle of the screen.
Now use the n command. Your cursor should be on the first line. Now use the N command. Your cursor should now be, once again, on the line in the middle of the screen.
Place the cursor at the beginning of the first line and search and replace the string super by the string wonderful using the following command :
:g/super/s//wonderful/g
You will obtain a result similar to the following example :
1 This is line Linux is wonderful1 2 This is line 2 3 This is line 3 4 This is line 4 5 This is line 5 6 This is line 6 7 This is line 7 8 This is line 8 9 This is line 9 10 This is line 10 11 This is line 11 12 This is line 12 13 This is line 13 14 Linux is wonderful 15 This is line 14 16 This is line 15 17 This is line 16 18 This is line 17 19 This is line 18 20 This is line 19 21 This is line 20 22 This is line 21 23 This is line 22 24 This is line 23 25 This is line 24Linux is wonderful 3 substitutions on 3 lines 25,1 Top
Deleting Text
Commands
Key(s) | Description |
---|---|
x | Delete single character under cursor |
X | Delete single character to the left of cursor |
5x | Delete 5 characters, starting with character under cursor |
dw | Delete current word |
5dw | Delete 5 words, starting with the word under cursor |
dd or :d | Delete the current line |
5dd | Delete 5 lines starting with the line under cursor |
:5,7 d | Delete lines 5, 6 and 7 |
LAB #7 - Deleting lines
Place the cursor on the line containing 14 and delete it using the dd command. You will obtain a result similar to the following example :
1 This is line Linux is wonderful1 2 This is line 2 3 This is line 3 4 This is line 4 5 This is line 5 6 This is line 6 7 This is line 7 8 This is line 8 9 This is line 9 10 This is line 10 11 This is line 11 12 This is line 12 13 This is line 13 14 This is line 14 15 This is line 15 16 This is line 16 17 This is line 17 18 This is line 18 19 This is line 19 20 This is line 20 21 This is line 21 22 This is line 22 23 This is line 23 24 This is line 24Linux is wonderful 25 This is line 25 14,1 All
Note the contents of lines 4 through 6. Now delete those lines using the following command:
:4,6 d
You will obtain a result similar to the following example :
1 This is line Linux is wonderful1 2 This is line 2 3 This is line 3 4 This is line 7 5 This is line 8 6 This is line 9 7 This is line 10 8 This is line 11 9 This is line 12 10 This is line 13 11 This is line 14 12 This is line 15 13 This is line 16 14 This is line 17 15 This is line 18 16 This is line 19 17 This is line 20 18 This is line 21 19 This is line 22 20 This is line 23 21 This is line 24Linux is wonderful 22 This is line 25 ~ ~ ~ 3 fewer lines 4,1 All
Copy, Cut and Paste
Commands
Key(s) | Description |
---|---|
yy or Y or :y | Copy (yank) the current line into the buffer |
V | Select a block of text |
p | Put (paste) the line(s) in the buffer into the text after the current line |
P | Put (paste) the line(s) in the buffer into the text before the current line |
:2,3 co 7 | Copy lines 2 to 3 to the line after line 7 |
:2,3 m 7 | Move lines 2 to 3 to lines 6 and 7 |
LAB #8 - Copying, Cutting and pasting text
Move the cursor to line 3 and copy it using the yy command. Move to line 5 and paste the line using the p command:
1 This is line Linux is wonderful1 2 This is line 2 3 This is line 3 4 This is line 7 5 This is line 8 6 This is line 3 7 This is line 9 8 This is line 10 9 This is line 11 10 This is line 12 11 This is line 13 12 This is line 14 13 This is line 15 14 This is line 16 15 This is line 17 16 This is line 18 17 This is line 19 18 This is line 20 19 This is line 21 20 This is line 22 21 This is line 23 22 This is line 24Linux is wonderful 23 This is line 25 ~ ~ 3 fewer lines 6,1 All
Move your cursor to line 4 and copy it using the Y command. Now move your cursor to line 6 and paste the copied line using the P command. You will obtain a result similar to the following example:
1 This is line Linux is wonderful1 2 This is line 2 3 This is line 3 4 This is line 7 5 This is line 8 6 This is line 7 7 This is line 3 8 This is line 9 9 This is line 10 10 This is line 11 11 This is line 12 12 This is line 13 13 This is line 14 14 This is line 15 15 This is line 16 16 This is line 17 17 This is line 18 18 This is line 19 19 This is line 20 20 This is line 21 21 This is line 22 22 This is line 23 23 This is line 24Linux is wonderful 24 This is line 25 ~ 3 fewer lines 6,1 All
Now use the following command :4,5 co 15. You will obtain a result similar to the following example:
1 This is line Linux is wonderful1 2 This is line 2 3 This is line 3 4 This is line 7 5 This is line 8 6 This is line 7 7 This is line 3 8 This is line 9 9 This is line 10 10 This is line 11 11 This is line 12 12 This is line 13 13 This is line 14 14 This is line 15 15 This is line 16 16 This is line 7 17 This is line 8 18 This is line 17 19 This is line 18 20 This is line 19 21 This is line 20 22 This is line 21 23 This is line 22 24 This is line 23 25 This is line 24Linux is wonderful :4,5 co 15 17,1 Top
Note that lines 4 and 5 have been copied to after line 16:
... 15 This is line 16 16 This is line 7 17 This is line 8 18 This is line 17 ...
Now use the following command: :4,6 m 20. You will obtain a result similar to the following example:
1 This is line Linux is wonderful1 2 This is line 2 3 This is line 3 4 This is line 3 5 This is line 9 6 This is line 10 7 This is line 11 8 This is line 12 9 This is line 13 10 This is line 14 11 This is line 15 12 This is line 16 13 This is line 7 14 This is line 8 15 This is line 17 16 This is line 18 17 This is line 19 18 This is line 7 19 This is line 8 20 This is line 7 21 This is line 20 22 This is line 21 23 This is line 22 24 This is line 23 25 This is line 24Linux is wonderful 3 lines moved 20,1 Top
Configuring a Personalised Interface
VI can be configured by any user to suit his/her requirements. This is achieved by creating and editing the file ~/.exrc. The file is read by VI each time it is launched by that user and the commands contained in it are executed. The format of each command is the same as if it were typed by the user within VI except that the leading : character is omitted. For example the following .exrc file would tell VI to turn on line numbering and show hidden characters:
set nu set list
To do - Save your vitext file and quit VI, copy the above text and paste it into a new file in your home directory called .exrc.
Open the /home/trainee/vitext file using VI:
trainee@debian8:~$ vi vitext
You will see a result similar to that shown below:
1 This is line Linux is wonderful1$ 2 This is line 2$ 3 This is line 3$ 4 This is line 3$ 5 This is line 9$ 6 This is line 10$ 7 This is line 11$ 8 This is line 12$ 9 This is line 13$ 10 This is line 14$ 11 This is line 15$ 12 This is line 16$ 13 This is line 7$ 14 This is line 8$ 15 This is line 17$ 16 This is line 18$ 17 This is line 19$ 18 This is line 7$ 19 This is line 8$ 20 This is line 7$ 21 This is line 20$ 22 This is line 21$ 23 This is line 22$ 24 This is line 23$ 25 This is line 24Linux is wonderful$ "vitext" 26L, 442C 20,1 Top
<html>
Copyright © 2004-2019 Hugh Norris.<br><br>
</html>