Vim is an extremely powerful text editor, with which you can do complicated editing without your hand ever leaving the keyboard. Personally I do not like GUI oriented editors such as notepad++ because: A. I am too lazy to reach the mouse and B. GUI menu system often confuses me.
I am only a starter user of Vim and only know basic commands. I am trying to learn more of Vim, and this series of posts consist of my notes/cheatSheet from reading Learning the vi and Vim Editors.
Vim is an enhanced version of vi editor, which itself is an enhanced version(visual version) of ex editor. Therefore I’ll try to organize my notes into these three parts: Part 1: vi, Part 2: ex and Part 3: vim.
1. Part 1: vi
There are two modes in vi: Command Mode and Insert Mode. As the name suggests, Insert Mode is the mode where vi behaves like a normal text pad where you can type in characters and delete text using your keyboard one character at a time. However, the real power of vi comes from Command Mode, because in this mode you can do all sorts of high-level navigation and editing.
Based on functionality, vi commands can be roughly binned into the following 3 categories:
- Navigation Commands are commands used to help us move around in the file(they only change position of your cursor, you always stay in Command Mode). For most of the commands you can apply a multiple number to execute the navigation command multiple times([multiple number]command will execute the command multiple number times)
h |
Left |
j |
Down |
k |
Up |
l |
Right |
CTRL+f |
Scroll forward one screen |
CTRL+b |
Scroll backward one screen |
CTRL+d |
Scroll forward half a screen |
CTRL+u |
Scroll backward half a screen |
CTRL+e |
Scroll screen up one line |
CTRL+y |
Scroll screen down one line |
H |
Move to top line on the screen |
M |
Move to middle line on the screen |
L |
Move to bottom line on the screen |
z ENTER |
Move current line to top of screen |
z. |
Move current line to center of screen |
z- |
Move current line to bottom of screen |
0 |
Move to beginning of line |
$ |
Move to end of line |
^ |
Move to first non-blank character of the line |
num |
Move to column num of the line |
w |
Move cursor forward one word at a time |
W |
Move cursor forward one word at a time, ignoring symbols |
b |
Move cursor backward one word at a time |
B |
Move cursor backward one word at a time, ignoring symbols |
e |
To end of word |
E |
To end of word, ignoring symbols |
( |
Move to beginning of current sentence |
) |
Move to beginning of next sentence |
{ |
Move to beginning of current paragraph |
} |
Move to beginning of next paragraph |
% |
Move to matching bracket. Useful for programming |
+ |
To first character of next line |
– |
To first character of previous line |
G |
Go to end of file |
numG |
Go to line num |
/pattern |
Search regular expression pattern |
?pattern |
Search regular expression pattern in backward direction |
n |
Repeat search in same direction |
N |
Repeat search in opposite direction |
fchar |
Find next occurance of char in the line |
Fchar |
Find previous occurance of char in the line |
tchar |
Find character before next occurance of char in the line |
Tchar |
Find character after previous occurance of char in the line |
; |
Repeat previous find operation in the same direction |
mchar |
Mark current position with char (char can be any letter) |
`char |
Move cursor to character marked by char |
‘char |
Move cursor first character of line marked by char |
“ |
Return cursor to your original position |
” |
Return cursor to the first character of the line of original position |
|
- Editing Commands contains commands to do editing. Depending on the type of the edit, You will either go from Command Mode into Insert Mode, or you stay in Command Mode. You can always get back to Command Mode by pressing ESC key. General syntax for commands in this category is command[multiple number][destination] and [multiple number]command[destination], which basically mean executing command multiple number times from current position to the position indicated by destination. destination is usually one of Navigation Commands described above.
i |
Insert |
I |
Insert at beginning of line |
a |
Append |
A |
Append to end of line |
o |
Open blank line below cursor for text |
O |
Open blank line above cursor for text |
c |
Change |
C |
Replace characters from current cursor position to end of current line |
cc/S |
Replace entire current line |
s |
Delete character at cursor and substitute text |
S/cc |
Delete entire line and substitute text |
r |
replace a single character |
R |
replace any number of characters |
x |
Delete a single character |
X |
Delete a single character before current position |
d |
Delete |
D |
Delete to end of line |
p |
Put |
P |
Put before current position |
y |
Yank |
Y/yy |
Yank the whole line |
J |
Join two lines |
~ |
Change case |
. |
Repeat last edit command |
u |
Undo last command |
U |
Undo all edits on a single line |
“char |
Access buffer char |
|
- Other Commands contain commands to do miscellaneous things, like saving the file, quit vi, change vi environment etc.
ESC |
Change to Command Mode |
Q |
Go to ex editor. Type vi to get back to vi |
ZZ/:wq |
Save and quit |
CTRL+l |
Redraw the screen |
CTRL+g |
Show current line position information |
vim +num file |
Open file and go to line num |
vim + file |
Open file and go to last line |
vim +/pattern |
Open file and go to first occurrence of pattern |
vim -R file |
Open file in read-only mode |
vim -r file |
Open file and recover edit buffer |
:set wm=num |
Automatically insert a newline after num characters |
:set nowrapscan |
Disable wrap from beginning of file when doing search |
:set nu/number |
Display line numbers |
:set nonu/nonumber |
Disable display line numbers |
:set autoindent |
Enable autoindentation for programming |
:set noautoindent |
Disable autoindentation |
:set list |
Show tab as special character |
:set nolist |
Show tab as normal tab |
:set showmatch |
Show matching bracket in Insert Mode |
:sh |
Create a shell. Type EXIT to terminate the shell and come back to vi |
:ab abbr phrase |
Abbreviate phrase to abbr |
:unab abbr |
Disable abbreviation abbr |
:map x sequence |
Define character x as a sequence of editing commands |
:unmap x |
Undefine mapping x |
:!cmd |
execute shell command cmd |
|