I’ve been using Vim for just over a year. A combination of the Vim emulator in VSCode and Neovim in the terminal. The former is a great way to start familiarizing yourself with the basics before you jump into the latter. In this post, I want to walk through some of the movements I use everyday to traverse files quickly.
- Up, down, left and right
- Up, down, left and right, but faster
- Jump to the beginning of a line
- Jump to the end of a line
- Jump to a specific line
- Search for text
These are the first four movements anyone questing in Vim-land will learn. They are executed with the
h- move left
j- move down
k- move up
l- move right
You can think of these four letters as flattened arrows, the ones you’d normally find on a keyboard.
Getting comfortable with
hjkl will take time, but eventually you’ll be looking to traverse documents faster. You can achieve more speed in each direction using the following keys:
w- move forward to beginning of next word
b- move backward to beginning of previous word
Ctrl-u- move halfway up the screen
Ctrl-d- move halfway down the screen
I tend to use the keys above much more frequently, usually to locate a specific part of the file. I'll then rely on the
hjkl keys for pinpointing specific characters.
This one isn't a movement per se, but it will really improve your experience when you start utilizing vertical movements like
Ctrl-d. Without overriding the default value of
scrolloff, the minimal number of lines above and below the cursor will be
0. This results in your cursor being potentially locked to the first or last line of the file depending on the direction you are heading.
It's kind of annoying.
I would suggest overriding the default value with a number you feel comfortable with:
" .vimrc set scrolloff=8
The configuration above will maintain, at minimum, 8 lines above or below the cursor based on your location in the file while scrolling. You can think of it as a padding of sorts.
This is an improvement, but I like to take it further:
" .vimrc set scrolloff=999
With the value
999, you can force the cursor to stay in the middle of the file in most scenarios. This prevents your eyes from jumping around looking for the cursor, as it will usually be in the middle of the screen until your reach the beginning or end of the file.
This can be achieved in a few ways, depending on what your needs are:
^- Go to the first character in the line
0- Go to the first column in the line
Shift-i- Place the cursor before the first character in the line, and enter
0 are almost the same. Their difference occurs when the line you're on is indented.
^ takes you to the first non-blank character in a line.
0 will always take you to the start of a line, even if there is no character there.
Shift-i is useful when you want to navigate to the beginning of a line and start typing immediately.
Similar to jumping to the beginning of a line, we can also jump to the end of a line using the following keys:
$- Go the last character in the line
Shift-a- Place the cursor after the last character in the line, and enter
There are a few ways to jump to a specific line, and they all involve the letter "G".
gg- Jump to the first line in a file
G- Jump to the last line in a file
35G- Jump to line number 35
G pretty heavily. They're great ways to go north and south, especially if you know what you're looking for.
The last example shows how to jump to a specific line number, in this case line 35. If you type a line number that is beyond the max line number in the file, you will just go to the last line.
" .vimrc " add line numbers set number " add width to line numbers set numberwidth=4
These are must haves in my opinion, but if you are going to leverage line
numbers while navigating files in Vim, you may want to consider adding a new
" .vimrc set relativenumber
relativenumber setting shows line numbers relative to the line you are
currently on. In the example below, the cursor is on line 12, and the lines
above and below are numbered 1, 2, 3 and so on.
Why do I suggest this? Using
relativenumber enables even more efficiency when
traversing north and south:
3j- Jump down 3 lines
8k- Jump up 8 lines
k without line numbers as a prefix will go 1 line down and up
respectively. So this should feel pretty natural once you use it a few times.
These movements are still possible without the
relativenumber setting on, but
it is harder to identify how many lines up or down you want to jump.
To search for a specific text pattern in a file, you can prefix the pattern with
a forward slash
/my-word- Searches the file for the text pattern "my-word"
Once you complete typing out the pattern to search for, be sure to hit
This will jump you to the first occurrence of the pattern in the file. If there
is more than one match, you can jump between them using the following keys:
n- Jump to next occurrence of text pattern
Shift-n- Jump to previous occurrence of text pattern
Here are a few settings that can improve your search experience:
" .vimrc " Disable highlighting of all search results set nohlsearch " Only highlight first search result set incsearch " Default to case insensitive search set ignorecase " Use case sensitive search if pattern includes uppercase letter set smartcase
If you made it until the end, thanks for reading! I hope this article has been useful to you. I'm still very raw with Vim, but the movements described above have served me well. If you are new to the text editor, please give these a try and stick with it! You'll be surprised at how fast you adapt. It's all muscle memory!
I will do my best to keep this document updated as I progress with Vim and learn new ways to do things. If you have any suggestions, let me know on Twitter! And as always, happy building!