Follow @learnvim for more Vim tips and tricks!
Being able to freely move around in a file is an indispensable vim skill.
Below is a list of the commands I use to move around in a file. I will also share some tips to move around efficiently and how you can start applying it.
# Table of Contents - [Navigations](#navigations) * [Setup Your Numbers](#setup) * [Character Navigation](#character-nav) * [Word Navigation](#word-nav) * [Current Line Navigation](#current-line-nav) * [Match Navigation](#match-nav) * [Function Navigation](#func-nav) * [Block Navigation](#block-nav) * [Line Navigation](#line-nav) * [Screen Navigation](#screen-nav) * [Search Navigation](#search-nav) * [Scrolling](#scrolling) - [General tips on navigating](#navigating-tips) - [How to apply this cheatsheet](#application-tips)# Setup Your Numbers Before starting, I find it helpful to have `number` and `relativenumber` set on vim. You can do it by running `:set relativenumber number` or having this on `.vimrc`:set relativenumber
set number
This tells my current position and displays n lines above/ below my current position.
# Character navigation Navigating around text:h left
j down
k up
l right
# Word navigationw move forward to the beginning of next word
W move forward to the beginning of next WORD*
e move forward one word to the end of next word
E move forward one word to the end of next WORD
b move backward to beginning of previous word
B move backward to beginning of previous WORD
ge move backward to end of previous word
gE move backward to end of previous WORD
* From :h WORD
: A WORD consists of a sequence of non-blank characters, separated with white space. An empty line is also considered to be a WORD.
% Navigate to another match, usually works for (), [], {}
(with matchit.vim on), we can now toggle within methods.
# Block navigation{ Jump to prev paragraph
} jump to next paragraph
( Jump to prev sentence
) Jump to next sentence
# File Line navigationgg go to first line
G go to last line
nG go to line n
n% go to n% in file
`` go to last jump position
Btw, you can see how many lines in a file with CTRL-G
.
0 go to first character of current line
^ go to first nonblank char of current line
n| go column n of current line
g_ go to last non-blank char of current line
$ go to last char of current line
# Screen navigationH go to top of screen
M go to medium screen
L go to bottom of screen
nH go n line from top
nL go n line from bottom
# Scrolling screenCtrl-e scroll down lines
Ctrl-d scroll down half screen
Ctrl-f scroll down whole screen
Ctrl-y scroll up lines
Ctrl-u scroll up half screen
Ctrl-b scroll up whole screen
# Function/ Module Navigation]m go to the start of next method
[m go to the start of previous method
]M go to the end of next method
[M go to the end of previous method
]] go to next class/ module
[[ go to previous class/module
For more information on function/module navigation, this vid by Drew Neil is very informative!
# Search navigation/ Search forward for a match
? Search backward for a match
n Repeat last search (same direction as previous search)
N Repeat last search (opposite direction as previous search)
f Search forward for a match in the same line
F Search backward for a match in the same line
t Search forward for a match in the same line, stopping before match
T Search backward for a match in the same line, stopping before match
; Repeat last search in the same line
, Repeat last search in the same line backwards
* Quickly search for word under cursor forward
# Quickly search for word under cursor backward
Phew! Some items above I use almost every time, some I hardly ever used, but it's good to know they exist. Find one that works for you.
# General tips on navigatingWhen moving around in Vim, it is important to see patterns inside a file. Moving in vim reminds me of painting, start with the broadest stroke you know.
50%
then go down with j
.73G
}}}
instead of mashing j
buttons.const uniqueKeyword = 'UNIQUE'
? Search-jump with /uniqueKeyword
If when you arrive on target line, the target word is still far near the end of the sentence, you can approach it with (w
) - or if possible, look for unique letter around that target word. For example, if the sentence is:
I ate a fried fish next to a zebra today
Assume that you are starting with your cursor on "I". You want to edit "a" before zebra. Start by "find z" (fz
) because "z" is not a commonly used letter then backtrack with b
. Typing fzb
(3 keystrokes) is faster than going to end then backtrack $bbb
(4 keystrokes) and it is faster than wwwwwww
(7 keystrokes). The last thing we want to do it pressing a lot of l
's. Can you think of a pattern that get you there with less keystrokes? This is what makes vim fun!
To get better at it, spend a few days playing vimgolf. Trust me, you will learn a lot.
# How to apply this cheatsheetYou might be thinking: "O geez, there are so many of them! How can I possibly remember all of them?"
Here are my personal tips:
:h
.If you are brand new to Vim and feel overwhelmed where to start, here are some commands you should learn first:
Basic navigations:
h
j
k
l
Word Navigation:
w
b
Jump to line n
nG // ex: 1G, G, 73G
Searches:
/
?
n
These 10 should put you in a really good position to move around in a file.Then slowly add more to your arsenal.
Thanks for reading! Appreciate you making it this far. If you have more tips or questions, or found a mistake 😅, please feel free to comment below!