DEV Community

Cover image for The Ultimate Guide to VI Editor: From Novice to Ninja
kaustubh yerkade
kaustubh yerkade

Posted on • Edited on

The Ultimate Guide to VI Editor: From Novice to Ninja

VI is a powerful text editor. that operates in several modes. Here's a quick guide to get you started with vi.

but first, here's how to exit VI--> 🤗
To exit VI with save - Press Esc , then : then wq!
To exit without save - Press Esc , then : then q!

Modes in vi

1. Normal Mode: The mode you are in when you first open vi. In this mode, you can navigate the file, Explore file contents and enter commands.

Image description

2. Insert Mode: In this mode, you can insert text. To enter insert mode, press i from normal mode.

Image description

3. Command-Line Mode:This mode is used to type commands that start with ':'.

Image description

Switching Between Modes--
From Normal to Insert Mode: Press i (to insert before the cursor) or a (to insert after the cursor).
From Insert to Normal Mode: Press Esc.
To Insert into command mode Press: ':'

Basic Navigation
ESC +
h : Move left
j : Move down
k : Move up
l : Move right
0 : Move to the beginning of the line
$ : Move to the end of the line
w : Move to the beginning of the next word
b : Move to the beginning of the previous word
G : Move to the end of the file
gg : Move to the beginning of the file

Editing Text
ESC+
i : Insert text before curser
a : Insert text after curser
o : Insert new line below curser
O : Insert new line above curser
x : Delete the character under the cursor
dw : Delete the word
dd : Delete the entire line
u : Undo the last change
Ctrl + r : Redo
yy : Copy the line
99999yy : select and copy everything
+p : to paste all
p : Paste the copied line after the current line
r : Replace the character under the cursor
ggVg : select all text

Saving and Exiting
: +
:w -Save the file
:q -Quit vi
:wq -Save and quit
:q! -Quit without saving

Searching
?pattern : Search & highlight the pattern in the file.nohlsearch to remove highlight.
/pattern : Search for pattern in the file. Press n to go to the next occurrence and N to go to the previous one.

Replacing
:s/old/new/g: Replace all occurrences of old with new in the current line.
:%s/old/new/g :Replace all occurrences of old with new in the entire file.

Customization
:set number : Show line numbers
:set nonumber : Hide line numbers
:set autoindent : Enable auto-indentation
:set noautoindent : Disable auto-indentation
:set tabstop=<n> : Set the number of spaces per tab to <n>
:set shiftwidth=<n> : Set the number of spaces for indentation to <n>
:syntax on : Enable syntax highlighting
:syntax off : Disable syntax highlighting
:colo blue : to chnage vi theme to blue

Image description


To open or create a file with vi:
vi file_name.txt

Image description

Image description

To save changes and exit vi-
Press Esc to ensure you are in command mode.
Type :wq and press Enter.

Image description

To exit without saving-
Press Esc to enter command mode.
Type :q! and press Enter.

Image description


*VI Cheat Sheet - *
Image description

Image description


Bonus-

Advanced Navigation
Ctrl + d : Scroll down half a screen
Ctrl + u : Scroll up half a screen
Ctrl + f : Scroll forward one full screen
Ctrl + b : Scroll backward one full screen
H : Move to the top of the screen
M : Move to the middle of the screen
L : Move to the bottom of the screen

Advanced Editing

Deleting
d$ : Delete from the cursor to the end of the line
d0 : Delete from the cursor to the beginning of the line
dG : Delete from the current line to the end of the file
dgg : Delete from the current line to the beginning of the file

Changing
cw : Change (replace) from the cursor to the end of the word
c$ : Change from the cursor to the end of the line
c0 : Change from the cursor to the beginning of the line
cG : Change from the current line to the end of the file

Yanking (Copying)
yw : Yank (copy) from the cursor to the end of the word
y$ : Yank from the cursor to the end of the line
y0 : Yank from the cursor to the beginning of the line
yG : Yank from the current line to the end of the file
ygg : Yank from the current line to the beginning of the file

Visual Mode
v : Start visual mode, use arrow keys to select text
V : Start line-wise visual mode, use arrow keys to select lines
Ctrl + v : Start block visual mode, use arrow keys to select a block of

text
d : Delete the selected text
y : Yank (copy) the selected text
~ : Change the case of the selected text
'>' : Indent the selected text
< : Unindent the selected text

Multi-file Editing
:e filename : Edit another file
:bnext or :bn : Go to the next buffer (file)
:bprev or :bp : Go to the previous buffer
:bd : Delete a buffer (close the file)

Macros
q<letter> : Start recording a macro to the specified register (letter a-z)
q : Stop recording the macro
@<letter> : Play the recorded macro
@@ : Repeat the last played macro

Working with Multiple Files
:split filename : Split the window and open another file
:vsplit filename : Vertically split the window and open another file
Ctrl + w, Ctrl + w : Switch between split windows
:close : Close the current split window

Image description

Other Useful Commands
:!<command>: Execute an external command
Example: :!ls to list directory contents

:r !<command> : Insert the output of an external command into the file
Example: :r !date to insert the current date and time

Check out the amazing game-

Image description

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

Billboard image

Try REST API Generation for Snowflake

DevOps for Private APIs. Automate the building, securing, and documenting of internal/private REST APIs with built-in enterprise security on bare-metal, VMs, or containers.

  • Auto-generated live APIs mapped from Snowflake database schema
  • Interactive Swagger API documentation
  • Scripting engine to customize your API
  • Built-in role-based access control

Learn more