HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
kien
ctrlp.vim
Vim Script2011–2019
kien / ctrlp.vim

ctrlp.vim

Fuzzy file, buffer, mru, tag, etc finder.

31Distinct people
32Mentions
0Explicit recommenders
7.2KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Fuzzy file, buffer, mru, tag, etc finder.

GitHub

Where it is used

The source check is incomplete. Verified examples will appear here.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 1:49:46 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year32 dated mentions

Observed mentions: 2011-09-06 22:27:10 UTC to 2019-03-30 17:00:23 UTC.

0369122011-01-01 00:00:00 UTC to 2012-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments20112012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 11 mentions; 1 submissions, 10 comments2013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20152016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2019

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20112011-01-01 00:00:00 UTC2012-01-01 00:00:00 UTC110
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC11110
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC707
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC707
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC202
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC000
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC000
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC303
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC101

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
#This project is unmaintained You should use this fork instead. ctrlp.vim Full path fuzzy file, buffer, mru, tag, ... finder for Vim. Written in pure Vimscript for MacVim, gVim and Vim 7.0+. Full support for Vim's regexp as search patterns. Built-in Most Recently Used (MRU) files monitoring. Built-in project's root finder. Open multiple files at once. Create new files and directories. Extensible. Basic Usage Run :CtrlP or :CtrlP [starting-directory] to invoke CtrlP in find file mode. Run :CtrlPBuffer or :CtrlPMRU to invoke CtrlP in find buffer or find MRU file mode. Run :CtrlPMixed to search in Files, Buffers and MRU files at the same time. Check :help ctrlp-commands and :help ctrlp-extensions for other commands. Once CtrlP is open: Press <F5> to purge the cache for the current directory to get new files, remove deleted files and apply new ignore options. Press <c-f> and <c-b> to cycle between modes. Press <c-d> to switch to filename only search instead of full path. Press <c-r> to switch to regexp mode. Use <c-j>, <c-k> or the arrow keys to navigate the result list. Use <c-t> or <c-v>, <c-x> to open the selected entry in a new tab or in a new split. Use <c-n>, <c-p> to select the next/previous string in the prompt's history. Use <c-y> to create a new file and its parent directories. Use <c-z> to mark/unmark multiple files and <c-o> to open them. Run :help ctrlp-mappings or submit ? in CtrlP for more mapping help. Submit two or more dots .. to go up the directory tree by one or multiple levels. End the input string with a colon : followed by a command to execute it on the opening file(s): Use :25 to jump to line 25. Use :diffthis when opening multiple files to run :diffthis on the first 4 files. Basic Options Change the default mapping and the default command to invoke CtrlP: let g:ctrlp_map = '<c-p>' let g:ctrlp_cmd = 'CtrlP' When invoked, unless a starting directory is specified, CtrlP will set its local working directory according to this variable: let g:ctrlp_working_path_mode = 'ra' 'c' - the directory of the current file. 'r' - the nearest ancestor that contains one of these directories or files: .git .hg .svn .bzr _darcs 'a' - like c, but only if the current working directory outside of CtrlP is not a direct ancestor of the directory of the current file. 0 or '' (empty string) - disable this feature. Define additional root markers with the g:ctrlp_root_markers option. Exclude files and directories using Vim's wildignore and CtrlP's own g:ctrlp_custom_ignore: set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux set wildignore+=*\\tmp\\*,*.swp,*.zip,*.exe " Windows let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$' let g:ctrlp_custom_ignore = { \ 'dir': '\v[\/]\.(git|hg|svn)$', \ 'file': '\v\.(exe|so|dll)$', \ 'link': 'some_bad_symbolic_links', \ } Use a custom file listing command: let g:ctrlp_user_command = 'find %s -type f' " MacOSX/Linux let g:ctrlp_user_command = 'dir %s /-n /b /s /a-d' " Windows Check :help ctrlp-options for other options. Installation Use your favorite method or check the homepage for a quick installation guide.
Read the full README on GitHub

What Hacker News says

32 sources
I'm relatively new to Vim (~4 months). I used the "learning by doing" approach by forcing myself to use Vim to write C and Python at work. I had two main reasons for learning Vim: (1) Vim is everywhere, so it must be worth it to learn the basics at least; and (2) modal editing felt easier on my wrists than the standard mouse + shortcuts approach I ended up using in other IDEs. Here is my advice: 1. Start with only a theme in your .vimrc, so no plugins or non-standard key bindings. 2. Use Vimtutor (or any other tutorial) to learn the basics: normal vs. insert mode, movement, manipulation, yank/paste (+ clipboard), splits, buffers, and searching. 3. As you write code, you will find yourself wanting to know how to do X. This is where Google and a simple "cheatsheet" file come in. Once you find out how to do X via Google, add an entry to your
Read the rest
cheatsheet file (example in HTML form: [1]). 4. In many cases, you will find that a plugin will solve one of your issues. Install that plugin and add it to your .vimrc. I recommend vim-plug[2] for managing and installing plugins. 5. There are many useful plugins out there. Two I would strongly recommend: CtrlP[3] and NERDTree[4]. Once you have a good grasp of Vim, I would recommend exploring Emacs + Evil-mode if you want a more complete IDE experience. [1]: https://assil.me/2018/11/12/vim-cheatsheet.html [2]: https://github.com/junegunn/vim-plug [3]: https://github.com/kien/ctrlp.vim [4]: https://github.com/scrooloose/nerdtree
In Absolute Beginner's Guide to Emacs (2012)
A tonne of them, all managed by pathogen. I actually have a chunk of my bashrc that automatically reinfects my vimdir. Below are the ones I can easily grab. I also have a tonne of homebrew over the years, and a love/hate relationship with Jedi, YouCompleteMe and friends. https://github.com/noahfrederick/vim-skeleton vim-skeleton https://github.com/majutsushi/tagbar tagbar https://github.com/tmhedberg/SimpylFold SimpylFold https://github.com/nvie/vim-flake8 vim-flake8 https://github.com/kien/ctrlp.vim.git ctrlp.vim https://github.com/hashivim/vim-terraform.git vim-terraform https://github.com/hashivim/vim-packer.git vim-packer https://github.com/hashivim/vim-vagrant.git vim-vagrant git://github.com/rodjek/vim-puppet.git vim-puppet https://github.com/fatih/vim-go.git vim-go git://github.com/chase/vim-ansible-yaml.git https://github.com/vim
Read the rest
-airline/vim-airline vim-airline https://github.com/vim-airline/vim-airline-themes vim-airline-themes git://github.com/ekalinin/Dockerfile.vim.git Dockerfile.vim
In Python in Visual Studio Code
To play devil's advocate, it's possible to get a lot of those features in vim, see - https://valloric.github.io/YouCompleteMe/ - https://github.com/kien/ctrlp.vim - etc Anything else can quite easily be added via more plugins or by using a terminal multiplexer like tmux or screen (or a more complicated terminal like terminator, iTerm2, etc I use vim/tmux exclusively for my development, and while I don't use Java, I don't feel that I'm missing features that my coworkers running atom/vscode/etc have. I will admit that stepping through a debugger might be a bit harder, but I seem to find a few debugger plugins around, so I'm guessing someone has solved that.
In Developer Survey Results
You want CtrlP - it's a plugin that works basically the same way as Sublime Text's Cmd-T. If you want a more familiar Sublime-esque experience, you can also rebind it from Ctrl-P to Cmd-T (which is how I personally use it). So my workflow on a Mac is to type `mvim ~/project-dir-goes-here` and then press Cmd-T just like I would in Sublime to start typing in a filename and see a list of matching files to open. https://github.com/kien/ctrlp.vim http://stackoverflow.com/questions/11979313/command-key-in-m...
In A Vim Tutorial and Primer
For opening each file the first time: https://github.com/kien/ctrlp.vim For switching quickly between the 10 most recently used buffers: https://github.com/vim-scripts/LustyJuggler I suggest adding this to your .vimrc (the default mapping is <Leader>lj; my leader key is the spacebar, and I find space space to be much better): let g:LustyJugglerDefaultMappings = 0 nnoremap <silent> <Leader><Leader> :LustyJuggler<CR> For very quickly jumping between the current buffer, and the last buffer I have a mapping: nnoremap <leader>dd <C-^> because <C-^> is a bit awkward; <leader>dd could be anything that's very easy to type. So most of the time I'm alternating between two files using the <C-^> mapping. When I need to jump to a less recently used buffer I double tap <space>, opening LustyJuggler, then double tap the appropriate home row key to jump
Read the rest
to the buffer I want. If the buffer I want isn't in the ten most recently used, I open Ctrl-P, type enough characters from the file path of the file I want to make it the first choice, then hit enter.
In Vim: from n00b to meh
Managed with https://github.com/gmarik/vundle here are the plugins I'd say I use every day: https://github.com/airblade/vim-gitgutter show git change/deleted lines https://github.com/bling/vim-airline light weight, pure vimscript status line https://github.com/kien/ctrlp.vim fuzzy file finder that mostly works https://github.com/tpope/vim-fugitive very nice Git wrapper https://github.com/scrooloose/syntastic generic in Vim syntax checker plugin https://github.com/sjl/gundo.vim undo tree viewing
In Ask HN: What Vim plugins do you use?

Showing the 15 most recent of 32 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.