5 Minutes Vim: CtrlP considered harmful
Tags: vim, neovim
Published: 2020-01-01 12:07:26

---
title: 5 Minutes Vim: CtrlP considered harmful
published: true
description: In this 5 minutes of Vim goodness you learn how to find a superior mapping to ctrlP for moving within your project
tags: [vim,neovim]
series: 5 Minutes Vim
canonical_url: https://www.barbarianmeetscoding.com/blog/2020/01/01/5-minutes-vim-ctrl-p-considered-harmful
cover_image: https://www.barbarianmeetscoding.com/images/5-minutes-vim.jpg
---

*This article was originally posted in [barbarianmeetscoding.com](https://www.barbarianmeetscoding.com/blog/2020/01/01/5-minutes-vim-ctrl-p-considered-harmful). 😊*

In this 5 minutes of Vim goodness **we'll break the shackles of convention and become slightly more productive when using Vim**. Here we go!

Of all the activities you'll perform when coding with Vim (or any other editor), one of the most common ones is the simple act of moving between files. Since this is such a common thing we do in our daily coding using a plugin that allows us to move between files seamlessly is a must-have for all Vim users. 

These plugins fall in the category of **fuzzy search** file finders and they let you go from a workflow that in Vim can resemble:

* The slow typing of a file path using the `:edit` command
* The slow navigating of the file tree of your project in *netrw* (`:h netrw`).

and in other editors a manual search for a file with the mouse, to something that is so straightforward and instantenous as thinking of the name of a file, typing it and jumping right into it.

In VSCode it's called quick open and can be reached with `CTRL-P` or `CMD-P`. In other editors it's called *Go To File* or something similar. In Vim there's a slew of plugins that provide a similar (and often more powerful) functionality: **[fzf.vim](https://github.com/junegunn/fzf.vim), [ctrlP](https://github.com/ctrlpvim/ctrlp.vim) and [denite](https://github.com/shougo/denite.nvim)** are some of the ones which come to my mind as I type these words.

I personally use fzf and I use it all the time. The first mapping that I added to my vim fzf configuration was this:

```vim
nnoremap <C-p> :<C-u>FZF<CR> 
```

I probably found it somewhere in the docs and it has served me really well over the years. I just type `CTRL-P`, the name of my destination appears in my head, my fingers materialize it into text, and BOOM! I'm in that file.

All seems fine but when you stop to thing about it... Why use `CTRL-P` at all for such a common coding task? It forces me to move both of my pinky fingers away from the home row. That doesn't feel really great, does it? **The answer is probably tradition and inertia**. I can't quite remember which was the first editor to provide this sort of functionality (textmate?), but we've just continued the tradition and used this key binding when there are far better choices.

So instead, in order to perform this super frequent task, we can use the premium space in our keyboard, **the home row**. And we can rely on the `<leader>` key so that jumping into fuzzy search is super smooth:

```vim
nnoremap <leader>s :<C-u>FZF<CR> 
```

In my vim config `<leader>s` is `<space>s`. Both of these keys are under my hand in resting position so jumping into fuzzy search mode is completely friction free.

But this is just an example. The really important thing is the principle behind it:

* **Question everything**:  When using plugins or copying mappings from other plugin configurations or vimrcs from other users **question the mappings and commands**, think about how often you use them, and adapt them before you incorporate them in your own config.
* **Put frequent tasks in the home row**: Take advantage of the `<leader>` key in combination with the home row keys for frequent coding tasks

Happy fuzzy finding!