Starting vim
Insert vs command mode Saving and quitting |
Insert commands
Other editing commands Moving around the file |
Search and replace
Screen appearance and vim options Entering special characters Macros: creating your own commands |
Core commands for getting started with vim
sample configuration file: .vimrc to be placed in your home directory |
vim filename
view filename
If the system crashes or you lose connection while you're editing, you can usually
recover what you were doing by typing vim -r filename
Save the changes in the recovered file, quit, then remove the file named .filename.swp (so vim knows you've finished recovering). |
Saving and quitting (from command mode)
:w
, or (to override warnings) :w!
:q
ZZ
:q!
Commands that take you into insert mode: (again, hit
a
append (insert) after the cursor position
i
insert before the cursor position
A
append (insert) at the end of line
o
open (insert) on the line below the current line
O
open (insert) above the current line
I
insert before the first non-blank character
commands to alter existing text (also treated as insert mode):
cw
replace the rest of the current word with new text
C
replace the rest of the current line with new text
R
allows you to type over characters until you hit
the escape key
r
replace the single character under cursor with a new
character (once you type the single new character,
this command automatically takes you back to command
mode)
corrections you can perform while in insert mode:
^H
(control-h) erases the last character typed
(like the backspace key)
^W
(control-w) erases the last word typed
ESC
(escape key) ends insert mode,
and returns you to command mode
^C
(control-c) this is the interrupt command for most
linux programs, and in vim suspends insert mode
^D
(control-d) backtabs one character
^^D
caret (^) followed by control-d (^D);
backtabs to beginning of line;
^V
(control-v) quotes a non-printable character
J
automatically joins the next line to the current one
x
deletes the current character (by cursor position)
dw
deletes the rest of one word (from the current
cursor position )
D
deletes the rest of the current line (d$)
dd
deletes the current line
ma
d'a
yw
"yanks" a copy of the current word
yy
"yanks" a copy of the current line
ma
y'a
p
:r filename
.
u
^r
(hold down control and press r)
:earlier Nm
:earlier 15m
would undo all the changes from the last 15 minutes
U
"dp
17dd
12x
q:
allows you to browse through and select recently used
vim commands
:r filename
:.! commandname
:.! date
will get the current date and time
and put it in the file.
CR
to indicate hitting the return or enter key
and ^ to indicate holding down the control key)
^L
clears and redraws the window
zCR
redraws the screen with
the current line at the top of the window
z-CR
redraws the screen with
the current line at the bottom of the window
z.CR
redraws the screen with
the current line at the center of the window
^E
scrolls the text up 1 line
^Y
scrolls the text down 1 line
^U ^D
scrolls up or down one half screen
^F ^B
scroll up or down an entire screen
zz
centres the screen on the line the cursor is on
^G
displays which line number you're on now
nG
jump to the start of line number n
G
jump to the start of the very last line of the file
h
(left),
j
(down), k
(up), and l
(right)
%
move to the matching ( ) { or }
%
key,
and the cursor jumps to the bracket that currently matches up
with the one you're on
(
move to the beginning of the current sentence
)
move to the end of the current sentence
{
move to the beginning of the current paragraph
}
move to the end of the current paragraph
H
move to the top line on the screen
L
move to the last line on the screen
M
move to the middle line on the screen
CR
move to the next line, at the first non-whitespace
-
move to the previous line, at the first
non-whitespace
^
move to the next non white-space character
0
move to the beginning of the line
$
move to the end of the line
w
move forward a word
b
move back a word
e
move to the end of the current word
U
restore the current line
.
repeat the last change
"dp
retrieve the d'th last delete
/pattern
search forward (from the cursor) for the pattern
?pattern
search backward (from the cursor) for the pattern
n
repeat the last search (in the same direction as before,
but starting from your new position)
q/
and q?
allows you to browse through
and rerun your recent search commands
xxxx
with the new pattern yyyy
, from the current
cursor position to the end of a file, use the command:
:.,$s/xxxx/yyyy/g
:
is for command mode
.
is to start from the current position
,$s
is (I think) to indicate string replacement
/xxxx/yyyy/
is to indicate the old/new patterns
g
handles multiple xxxx
matches per line (if you only want to change the first
xxxx
on each line, then leave off the g
)
:set nu
:set nonu
:set ruler
:set noruler
:set cul
:set nocul
:set list
:set nolist
:set listchars=tab:>-,trail:@
:syntax on
or :syntax off
:color schemename
,
providing the name of the desired colour scheme.
Some of the colour schemes on our system
include: blue, darkblue, default, delek, desert, elflord, evening,
industry, koehler, morning, murphy, pablo, peachpuff, ron, shine,
slate, torte, zellner.
:sp filename
splits into a top/bottom window (new one on time),
:vsp filename
splits into left/right windows
^w
and ^W
let you switch between windows (forward/back)
:b#
toggles between the two most recently used windows
:resize N
adjusts the number of lines allocated to the current window
:vertical resize N
does the same for the number of columns
:set tabstop N
sets the default tab width
First, press q (to begin recording) then the letter you want to use for your command, e.g. x
Then type your command
Finally, press q again to end the recording
To run your macro you use @x (or whatever your chosen letter was)
You can also store these in your .vimrc using
let @x='your actual command stuff goes here'
map yourcommandname keysequence
,
and your own commands for insert mode using imap yourcommandname keysequence
When you type your command (in the appropriate mode) it runs the specified key sequence as if you had typed it in.
These are often used to create easier key sequences for commands you commonly use, or to give access to commands that are difficult to enter on some keyboards (e.g. an escape key on some phone apps).
Example: create a command v
to swap two characters using commands x and p
(so if you accidentally type "taht" instead of "that" you can fix it with a single keystroke)
:map v xp
Example: create a command jj
to allow you to escape from insert mode without needing
an escape key (the assumption being you rarely need to put "jj" in your text)
:imap jj <ctrl>-v <esc>
As with the options settings, you can place your macro definitions in your .vimrc file so they are automatically loaded every time you start vim.