Moving around in Vim
Tags: vim, neovim, cheatsheet, navigation
Published: 2019-10-17 12:33:15

---
title: Moving around in Vim
published: true
description: I like to move it, move it, I like to move it, move it
tags: vim, neovim, cheatsheet, navigation
canonical_url: https://irian.to/blogs/moving-around-in-vim
---

*Follow [@learnvim](https://twitter.com/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.

<a name="navigations"></a>
# 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)


<a name="setup"></a>
# 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.

<a name="character-nav"></a>
# Character navigation 
Navigating around text:

```
h  left
j  down
k  up
l  right
```

<a name="word-nav"></a>
# Word navigation 

```
w  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
```

\* <small>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.</small>

<a name="match-nav"></a>
# Match navigation 

```
%  Navigate to another match, usually works for (), [], {}
```

(with [matchit.vim](https://github.com/vim/vim/tree/a87b72cc316e065d66dcbcf7ec1cde330adef3a3/runtime/macros) on), we can now toggle within methods.

<a name="block-nav"></a>
# Block navigation 

```
{ Jump to prev paragraph
} jump to next paragraph
( Jump to prev sentence
) Jump to next sentence
```

<a name="line-nav"></a>
# File Line navigation 

```
gg  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`. 

<a name="current-line-nav"></a>
# Current line navigation 

```
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
```


<a name="screen-nav"></a>
# Screen navigation 

```
H  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
```

<a name="scrolling"></a>
# Scrolling screen 

```
Ctrl-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
```

<a name="func-nav"></a>
# 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](https://thoughtbot.com/upcase/videos/navigating-within-ruby-files) is very informative!

<a name="search-nav"></a>
# 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.

<a name="navigating-tips"></a>
# General tips on navigating 

When 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. 

- Is the word you're targeting  slightly past the halfway length of the file? Start with `50%` then go down with `j`.
- Is it on line 73? This is awesome, jump directly there with `73G`
- Is the text 3 paragraphs down? Do `}}}` instead of mashing `j` buttons.
- Do you know that it is near a unique keyword `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](https://www.vimgolf.com/). Trust me, you will learn a lot.


<a name="application-tips"></a>
# How to apply this cheatsheet 

You might be thinking: "O geez, there are so many of them! How can I possibly remember all of them?"

Here are my personal tips:

- DO NOT try to commit all of them into memory in one sitting. 
- Learn 5-6 of them today, use them every day for a week! Don't rush - what's the hurry?
- Learn another 5-6 next week while using the ones you learned previously.
- Do vimgolf and see how you fare *on your own*, then learn from other golfers.
- It took me almost a year to learn the above. I am still learning something new every week about Vim. Doing Vim is a long term commitment.
- Learn to utilize help `: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!

![Cheat sheet - you can do it](https://media.giphy.com/media/DddiSElbjDAzu/giphy.gif)