Telescope vs fzf-lua for Neovim
Telescope vs fzf-lua for Neovim
The confusion: Neovim has multiple fuzzy finder plugins. Here's the complete breakdown.
TL;DR Decision Matrix
| Use Case | Recommendation | Why |
|---|---|---|
| New to Neovim | Telescope | Built-in to LazyVim, feature-rich, batteries-included |
| Existing fzf user | fzf-lua | Leverage existing fzf knowledge, faster, lighter |
| Want both | Use Telescope, add fzf-lua later | Not mutually exclusive! |
The Three Options
1. Telescope (nvim-telescope/telescope.nvim)
What it is: Pure Lua fuzzy finder built specifically for Neovim
Pros:
- β Default in LazyVim (you already have this!)
- β Pure Lua (no external dependencies)
- β Extremely feature-rich (LSP integration, live grep, git integration)
- β Highly extensible (huge ecosystem of extensions)
- β Beautiful UI with customizable themes
- β Built-in file preview
Cons:
- β Slightly slower than fzf (pure Lua vs native)
- β Heavier (more features = more complexity)
- β Different keybindings/UX than CLI fzf
Common use:
lua-- Already in LazyVim :Telescope find_files :Telescope live_grep :Telescope buffers
2. fzf-lua (ibhagwan/fzf-lua)
What it is: Neovim plugin that wraps the CLI fzf tool you already use
Pros:
- β Fast (uses native fzf binary)
- β Lighter/simpler than Telescope
- β Consistent UX with CLI fzf (same keybindings!)
- β
Can use existing
FZF_DEFAULT_OPTS - β Less resource-intensive
Cons:
- β Requires fzf to be installed (you already have it!)
- β Smaller ecosystem than Telescope
- β Not included in LazyVim by default
Common use:
lua:FzfLua files :FzfLua live_grep :FzfLua buffers
3. fzf.vim (junegunn/fzf.vim)
What it is: Original Vim/Neovim fzf plugin (Vimscript-based)
Status: Being replaced by fzf-lua for Neovim users
When to use: If you're still using Vim (not Neovim), use this
The Real Question: Why the Confusion?
You have Telescope already (it's in LazyVim by default). The question is:
Should you ADD fzf-lua or stick with Telescope?
Argument for Sticking with Telescope
- β Already configured and working
- β More features out-of-the-box
- β LazyVim has sensible defaults set up
- β One less thing to configure/maintain
Argument for Adding fzf-lua
- β
Consistent workflow with your shell (same
rfvmindset) - β Faster performance
- β Lighter weight
- β Can keep Telescope for some features (not mutually exclusive!)
Side-by-Side Comparison
| Feature | Telescope | fzf-lua |
|---|---|---|
| Speed | Fast | Faster (native fzf) |
| File search | β | β |
| Live grep | β | β |
| LSP symbols | β | β |
| Git integration | β Excellent | β Good |
| Preview | β | β |
| Dependencies | None (pure Lua) | Requires fzf binary |
| Extensibility | Huge ecosystem | Smaller ecosystem |
| UI customization | Extensive | Good |
| LazyVim default | β Yes | β No |
| Learning curve | Medium | Low (if you know fzf) |
What You Have Now (LazyVim)
Check your current Telescope setup:
bashnvim ~/.config/nvim/lua/plugins/telescope.lua
Default LazyVim keybindings:
<leader>ff- Find files<leader>fg- Live grep<leader>fb- Buffers<leader>fh- Help tags<leader>fr- Recent files<leader>gc- Git commits
Should You Switch to fzf-lua?
Recommendation: Start with Telescope, consider fzf-lua later
Why:
- Telescope is already working
- LazyVim has excellent Telescope integration
- You can always add fzf-lua for specific tasks
When to add fzf-lua:
- You want consistency with shell fzf workflow
- You find Telescope too slow/heavy
- You want to use same preview settings as
rfv
How to Add fzf-lua to LazyVim (Optional)
If you decide you want fzf-lua:
lua-- ~/.config/nvim/lua/plugins/fzf-lua.lua return { "ibhagwan/fzf-lua", dependencies = { "nvim-tree/nvim-web-devicons" }, config = function() require("fzf-lua").setup({ winopts = { height = 0.85, width = 0.80, preview = { layout = 'horizontal', horizontal = 'right:60%' } } }) end, keys = { { "<leader>pf", "<cmd>FzfLua files<cr>", desc = "Find Files (fzf-lua)" }, { "<leader>pg", "<cmd>FzfLua live_grep<cr>", desc = "Live Grep (fzf-lua)" }, { "<leader>pb", "<cmd>FzfLua buffers<cr>", desc = "Buffers (fzf-lua)" }, }, }
This adds fzf-lua alongside Telescope (not replacing it!):
<leader>pf/pg/pbfor fzf-lua<leader>ff/fg/fbfor Telescope (still works!)
My Recommendation for You
Use Telescope for now. Here's why:
- β It's already configured in LazyVim
- β It's excellent and you don't need to change anything
- β The performance difference is negligible for your use case
- β One less thing to configure/maintain
Later, if you want:
- Add fzf-lua for specific workflows where you want shell-fzf consistency
- Keep Telescope for LSP/Git features where it excels
- Use both! They complement each other
The Bigger Picture: Terminal vs Editor Fuzzy Finding
You now have TWO workflows:
1. Terminal (Shell) Workflow:
bashfzf # Browse files rfv TODO # Interactive code search
2. Editor (Neovim) Workflow:
vim:Telescope find_files :Telescope live_grep
These are SEPARATE and that's OK!
- Terminal: When you're exploring, not in an editor yet
- Neovim: When you're already editing, want editor integration
Common Misconception
β "I use fzf in my terminal, so I MUST use fzf-lua in Neovim"
β Reality: Telescope and terminal fzf can coexist happily!
They solve different problems:
- Terminal fzf: Before you open editor
- Telescope: Inside editor with LSP/Git integration
Summary
What you should do RIGHT NOW:
- β Keep using Telescope (it's already working!)
- β Learn Telescope keybindings in LazyVim
- β
Use
rfvin terminal for code search - βΈοΈ Don't worry about fzf-lua unless you have a specific need
When to revisit this decision:
- You find Telescope too slow (unlikely)
- You want identical UX between terminal and Neovim
- You're comfortable with Neovim and want to optimize
Related Articles
- Tool Composition - fzf ripgrep zoxide - Terminal fuzzy finding
- Configuring FZF_DEFAULT_COMMAND - Shell fzf setup
- LazyVim Configuration - Your Neovim distro
Links
Official Documentation
- Telescope: https://github.com/nvim-telescope/telescope.nvim
- fzf-lua: https://github.com/ibhagwan/fzf-lua
- LazyVim Telescope config: https://www.lazyvim.org/plugins/editor#telescopenvim