LeaderF: a Python fuzzy finder that treats Vim as a subprocess, not an extension
An efficient fuzzy finder that helps to locate files, buffers, mrus, gtags, etc. on the fly for both vim and neovim.
At a glance
- What is it?
- A Vim and Neovim fuzzy finder with twenty subcommands, an optional C extension for the matching algorithm, and a version compatibility story that dates back to Vim 7.3.
- Who is it for?
- LeaderF is the right pick when you want one consistent fuzzy interface over files, buffers, tags, ripgrep results and GitHub gtags, and you are willing to keep Python available to your editor. Two decisions drive everything else: the matching algorithm can be compiled to C for a large speedup, and the minimum editor version is higher than the headline requirement suggests once you are past v1.01.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 162 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 9, 2026, and from our analysis. They are not legal advice.
Editorial analysis
One command, twenty subcommands
LeaderF is invoked as `:Leaderf` followed by a subcommand, and the subcommand list is the project's real feature set. The README enumerates all twenty: file, tag, function, mru, searchHistory, cmdHistory, help, line, colorscheme, gtags, self, bufTag, buffer, rg, filetype, command, window, quickfix, loclist and jumps.
{file,tag,function,mru,searchHistory,cmdHistory,help,line,colorscheme,gtags,
self,bufTag,buffer,rg,filetype,command,window,quickfix,loclist,jumps}Each of those is a separate index with its own help, reachable with `:Leaderf <subcommand> -h`. The ones that differentiate it from a simpler file finder are `rg` for grepping through ripgrep, `gtags` for navigating tags from GNU Global, `quickfix` and `loclist` for reaching Vim's own result lists, and `self` for searching the plugin's own commands.
The README calls the project full featured, and that is a fair reading of a command surface this wide. It is also written in Python, which is the single fact that most affects whether it fits your setup.
The matching algorithm can be compiled, and you probably want it to be
The Performance section is unusually direct about this. LeaderF is described as already very fast, and the C extension of the fuzzy matching algorithm is stated to be more than ten times faster than the Python version. Installation is done from inside the editor:
Plug 'Yggdroot/LeaderF', { 'do': ':LeaderfInstallCExtension' }With a plugin manager that runs the `do` command, the extension compiles at install time. Otherwise the same thing happens on demand through `:LeaderfInstallCExtension`, with `:LeaderfUninstallCExtension` to remove it.
The verification step is the part worth remembering. After running any LeaderF command, check the value of `echo g:Lf_fuzzyEngine_C`. If it is 1, the C extension is loaded. That variable is the only reliable signal, which matters because the README warns there may be errors during installation and sends you to search the error message rather than documenting the failures.
Compiling a C extension needs a toolchain, and the README is specific about what it looks for: `python2` and `python3` commands on Linux, Unix and macOS, and `py -2` and `py -3` on Windows.
Version requirements that get stricter after v1.01
The Requirements section states vim7.3 or higher, and then immediately qualifies it: only 7.4.1126 and above are supported after v1.01. Python 2.7 or Python 3.1 or newer is required. Popup mode, which is the mode that draws results in a floating window rather than a split, additionally needs neovim 0.5.0 or vim 8.1.1615.
So there are two supported editor baselines depending on which mode you want, and the older one applies only if you are pinned before v1.01. The Python requirement is the other thing to check, since Python 2.7 support is listed even though that runtime reached end of life years ago, which suggests the requirement list has not been re-audited.
The README documents the in-window controls as well, and they are worth skimming because they are how you actually use the thing: `<C-R>` switches between fuzzy and regex modes, `<C-F>` switches between full path and name only, `<C-U>` clears the prompt, `<C-J>` and `<C-K>` move in the result window, `<Up>` and `<Down>` recall previous patterns, and `<C-]>`, `<C-X>` and `<C-T>` open the selection in a vertical split, a horizontal split or a new tab page. Popup windows have their own size arguments, `--popup-height` and `--popup-width`.
Search modes are per invocation, not a global setting
The global options list is where you can see that LeaderF is configured one command at a time rather than through a settings file. Flags come in pairs that pick a default: `--nameOnly` and `--fullPath`, `--fuzzy` and `--regexMode`, `--top`, `--bottom`, `--left`, `--right`, `--belowright`, `--aboveleft`, `--fullScreen` and `--popup` for placement, `--auto-preview` and `--no-auto-preview` for the preview window, `--next` and `--previous` for stepping through results, and `--no-sort` if you want arrival order.
Behavioural flags include `--stayOpen`, so accepting an entry does not quit the finder, `--recall` to reopen the last search, `--case-insensitive`, `--nowrap` for long lines, `--input` to prefill a pattern, `--cword` to seed the prompt with the word under the cursor, and `--reverse` for bottom-up ordering. Appending an exclamation mark to the invocation enters normal mode directly.
The design consequence is that mapping keys is where the work goes. There is no global configuration file in the tree to inspect, so the behaviour of your setup is defined by the mappings you wrote, and `:Leaderf self` is the way to find the commands you have not remembered.
No releases, but the README still links to a tag
Here is a genuine gap in the repository. The README's version history note points at a `CHANGELOG.md` for release history, and the requirements section links directly to a release page for the v1.01 tag where the stricter Vim baseline was introduced. The repository has no GitHub releases, so that link does not resolve to a release, and there is no version tag in the release list to compare against.
The `CHANGELOG.md` file is present at the root and is the artefact to trust for history. The tree also holds `autoload/`, `plugin/` and `syntax/`, which is the conventional Vim plugin layout, plus `doc/` for the help file, `install.sh` and `install.bat` at the root for manual installs, and `ISSUE_TEMPLATE.md`.
Two numbers frame how much attention the project gets. GitHub reports 2,198 stars and 186 forks, and 61 open issues, which is the highest open issue count among the projects in this group and hints at a steady stream of environment specific reports. The repository was last pushed on 2026-04-30, so the code is being worked on; plan on reading the changelog rather than pinning a version, since there is nothing to pin to.
Editorial conclusion
LeaderF is the right pick when you want one consistent fuzzy interface over files, buffers, tags, ripgrep results and GitHub gtags, and you are willing to keep Python available to your editor. Two decisions drive everything else: the matching algorithm can be compiled to C for a large speedup, and the minimum editor version is higher than the headline requirement suggests once you are past v1.01. Install the C extension during setup rather than treating it as an optimisation, and treat the absence of GitHub releases as a reason to read `CHANGELOG.md` rather than to pin a version.
Frequently asked questions
How do I speed up LeaderF's fuzzy matching?
Install the C extension of the matching algorithm, which the README states is more than ten times faster than the Python implementation. With vim-plug you can do it during plugin installation using the do option with :LeaderfInstallCExtension, or run that command later, with :LeaderfUninstallCExtension to remove it. Confirm it worked by checking that echo g:Lf_fuzzyEngine_C returns 1.
Which Vim versions does LeaderF support?
The README states vim7.3 or higher but qualifies it: only 7.4.1126 and above are supported after v1.01. Python 2.7 or Python 3.1 or newer is required. Popup mode, which draws results in a floating window, additionally needs neovim 0.5.0 or vim 8.1.1615 or newer.
What can LeaderF search besides files?
It exposes twenty subcommands: file, tag, function, mru, searchHistory, cmdHistory, help, line, colorscheme, gtags, self, bufTag, buffer, rg, filetype, command, window, quickfix, loclist and jumps. So it covers buffers, tags from GNU Global, ripgrep results, Vim's quickfix and location lists, and the plugin's own commands, not just files on disk.
How do I configure LeaderF's search behaviour?
Per invocation, through global flags rather than a settings file. Paired options pick defaults such as --nameOnly or --fullPath, --fuzzy or --regexMode, the placement flags including --popup and --fullScreen, and --auto-preview or --no-auto-preview. There are also --stayOpen, --recall, --case-insensitive, --input and --cword. Use :Leaderf <subcommand> -h for the help of one subcommand.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/yggdroot-leaderf)