Fuzzy Matching. This Is Another Powerful Tool Most Vim and NeoVim Users Rely On
In a regular IDE, many users eventually discover the “Ctrl+P” window and use it to fuzzy find files, but that is often where it ends. Or maybe it will fuzzy-match workspace symbols like classes and functions in a single place with files. Meanwhile, somewhere in the menus, a dedicated fuzzy matcher for symbols only is “hidden,” waiting to be discovered some day.
What do typical beginner Vim or NeoVim users do? They google a tutorial on how to configure their editor, watch some videos, and discover a cool feature everyone uses through plugins like Telescope or FzfLua. After installing the plugin, they start configuring mappings and discover an incredible range of functionality. These plugins provide fuzzy matching for search history, command history, document symbols, document diagnostics, workspace symbols and diagnostics, live grep, buffers, themes, LSP incoming/outgoing calls, LSP references, debugger commands, breakpoints, frames, and Vim-specifics like the quickfix list, jumps, marks, registers, options, and many more. And of course, files. Do you know regular expressions? You can match with regular expressions too.
Does this feel like too much to remember? The key is that in the Vim world, your knowledge grows exponentially rather than linearly. It is all about the power of composition. You learn motions, then you learn actions, and suddenly you can combine them. You learn commands and combine those with your motions and actions too. Then come macros: you can record your edits - commands, motions, actions, and all - into a macro and repeat it instantly. Then you discover that just as you can prefix motions with numbers to repeat them, you can do the same with actions and macros. Every new thing you learn doesn’t just add to your skill; it multiplies it.
Remember the undo tree from my previous post? Now we have fuzzy matching and the undo tree together. Since this is the Vim world, software and functionality are not separate, monolithic GUI blocks. You can combine fuzzy matching with the undo tree: your typed string matches against the diff of undo tree nodes, and the matcher gives you separate mappings to jump to that state, copy deletions from the diff, or copy the additions. This is done by combining a fuzzy matcher plugin with Vim’s built-in undo tree functionality.
Can you do this with the GUI blocks of regular IDEs? Who goes beyond GUI configs to edit the source code of a regular IDE and recompile it? In regular IDEs, many users probably never even touch the settings. When you get used to this level of control, you become very fast and waste less mental energy. You stay in the flow state and, as the saying goes, you edit at the speed of thought.
This is a quick showcase of the Telescope plugin.