Shift - i
: jump to beginning of line and start insert mode
$
: jump to end of line
Moving Horizontally Word By Word
w
to move word by wordb
to move backwards word by wordW
to move word by WORDB
to move backwards WORD by WORD
type wwww ==> v v v v v
word. are two words
word. is one WORD
type WWW ==> ^ ^ ^ ^
e
to jump to the end of a wordge
to jup to the end of the previous word
Move to a Specific Character
- Use
f{character}
(find) to move to the next occurrence of a character in a line. - Use
F{character}
to find the previous occurrence of a character - Use
t{character}
to move the cursor just before the next occurrence of a character (think oft{character}
of moving your cursor until that character). - Again, you can use
T{character}
to do the same ast{character}
but backwards
After using f{character}
you can type ;
to go to the next occurrence of the character or ,
to go to the previous one. You can see the ;
and ,
as commands for repeating the last character search. This is nice because it saves you from typing the same search over and over again.
type fdfdfd ==> v v v v
let damage = weapon.damage * d20();
let damage = weapon.damage * d20();
type fd;; ==> v v v v
0
: Moves to the first character of a line^
: Moves to the first non-blank character of a line$
: Moves to the end of a lineg_
: Moves to the non-blank character at the end of a line
v // I've added some extra whitespace at the end
function helloVimWorld() {
console.log("Hello vim world");
}
// So original Jaime. Your Grandma would be proud.
Moving Vertically
}
jumps entire paragraphs downwards{
similarly but upwardsCTRL-D
lets you move down half a page by scrolling the pageCTRL-U
lets you move up half a page also by scrolling
High Precision Vertical Motions With Search Pattern
/{pattern}
to search forward?{pattern}
to search backwards
--------------------------
---v----------------v-----
-----------v---cucumber---
-----v-----------v--------
--------------------------
If there’s multiple matches of the same pattern you can quickly jump between them using:
n
to go to the next matchN
to go to the previous match
The {pattern}
in /{pattern}
doesn’t have to be a string literal. It is a regular expression. Oh the mighty power of regular expressions! e.g. /##
to find second level headings in a markdown file.
Moving Faster With Counts
Counts are numbers which let you multiply the effect of a command:
{count}{command}
e.g. 2w
to move two words ahead, 5j
to jump file lines below`.
type f[;; ==> vv v
[[1], [1, 2], [3]]
[[1], [1, 2], [3]]
type 3f[ ==> ^
Try jumping to the second cucumber with 2/cuc
:
--------------------------
---v--cucumber------v-----
-----------v---cucumber---
-----v-----------v--------
cucumber------------------
And Some More Nifty Core Motions
- Type
gg
to go to the top of the file. - Use
{line}gg
to go to a specific line. - Use
G
to go to the end of the file. - Type
%
jump to matching({[]})
, i.e. opening and closing bracket.
Try going back to the top of this file with gg
, then come back with G
.
And now jump between these two matching brackets until you want to go to sleep:
start here f[%
\
\
v
const bagOfFoods = [["cucumber"], ["tomato", "potato"]];