Dmitriy Kovalenko 4a7cb312e1 feat: Correctly handle change of cwd automatically and via API
closes https://github.com/dmtrKovalenko/fff.nvim/issues/20

This allows to use

```
require('fff.main').find_files_in_dir('/Users/neogoose/dev/lightsource')
```

to change cwd and start the picker immediately to choose the file.
2025-08-02 23:44:28 +02:00
2025-08-02 00:30:34 +02:00
2025-08-02 19:58:19 +00:00
2025-08-02 00:30:34 +02:00
2025-08-02 00:30:34 +02:00
2025-08-02 00:30:34 +02:00
2025-08-02 00:30:34 +02:00
2025-08-02 00:30:34 +02:00
2025-08-02 00:30:34 +02:00
2025-08-02 00:30:34 +02:00
2025-08-02 00:30:34 +02:00

FFF.nvim

Finally a smart fuzzy file picker for neovim.

Stars Issues Contributors

FFF stands for freakin fast fuzzy file finder (pick 3) and it is an opinionated fuzzy file picker for neovim. Just for files, but we'll try to solve file picking completely.

It comes with a dedicated rust backend runtime that keep tracks of the file index, your file access and modifications, git status, and provides a comprehensive typo-resistant fuzzy search experience.

Features

  • Works out of the box with no additional configuration
  • Typo resistant fuzzy search
  • Git status integration allowing to take adavantage of last modified times within a worktree
  • Separate file index maintained by a dedicaged backend allows <10 milliseconds search time for 50k files codebase
  • Display images in previews (for now requires snacks.nvim)
  • Smart in a plenty of different ways hopefully helpful for your workflow

Installation

Note

Although we'll try to make sure to keep 100% backward compatibiility, by using you should understand that silly bugs and breaking changes may happen. And also we hope for your contributions and feedback to make this plugin ideal for everyone.

Prerequisites

FFF.nvim requires:

  • Neovim 0.10.0+
  • Rust toolchain (requires nightly for building the native backend)

Package Managers

lazy.nvim

{
  "dmtrKovalenko/fff.nvim",
  build = "cargo build --release",
  opts = {
    -- pass here all the options
  },
  keys = {
    {
      "<leader>ff", -- try it if you didn't it is a banger keybinding for a picker
      function()
        require("fff").toggle()
      end,
      desc = "Toggle FFF",
    },
  },
}

Default Configuration

FFF.nvim comes with sensible defaults. Here's the complete default configuration:

require("fff").setup({
  -- UI dimensions and appearance
  width = 0.8,          -- Window width as fraction of screen
  height = 0.8,         -- Window height as fraction of screen
  prompt = '🪿 ',       -- Input prompt symbol
  preview = {
      enabled = true,
      width = 0.5,
      max_lines = 100,
      max_size = 1024 * 1024, -- 1MB
  },
  title = 'FFF Files',  -- Window title
  max_results = 60,     -- Maximum search results to display
  max_threads = 4,      -- Maximum threads for fuzzy search

  keymaps = {
    close = '<Esc>',
    select = '<CR>',
    select_split = '<C-s>',
    select_vsplit = '<C-v>',
    select_tab = '<C-t>',
    -- Multiple bindings supported
    move_up = { '<Up>', '<C-p>' },
    move_down = { '<Down>', '<C-n>' },
    preview_scroll_up = '<C-u>',
    preview_scroll_down = '<C-d>',
  },

  -- Highlight groups
  hl = {
    border = 'FloatBorder',
    normal = 'Normal',
    cursor = 'CursorLine',
    matched = 'IncSearch',
    title = 'Title',
    prompt = 'Question',
    active_file = 'Visual',
    frecency = 'Number',
    debug = 'Comment',
  },

  -- Debug options
  debug = {
    show_scores = false,  -- Toggle with F2 or :FFFDebug
  },
})

Key Features

Multiple Key Bindings

You can assign multiple key combinations to the same action:

keymaps = {
  move_up = { '<Up>', '<C-p>', '<C-k>' },    -- Three ways to move up
  close = { '<Esc>', '<C-c>' },              -- Two ways to close
  select = '<CR>',                           -- Single binding still works
}

Multiline Paste Support

The input field automatically handles multiline clipboard content by joining all lines into a single search query. This is particularly useful when copying file paths from terminal output.

Debug Mode

Toggle scoring information display:

  • Press F2 while in the picker
  • Use :FFFDebug command
  • Enable by default with debug.show_scores = true

#### vim-plug

```vim
Plug 'MunifTanjim/nui.nvim'
Plug 'dmtrKovalenko/fff.nvim', { 'do': 'cargo build --release' }
S
Description
The fastest and the most accurate file search SDK for AI agents, Neovim, Rust, C, Python, Bun and NodeJS|GitHub 镜像 10.1k · 🍴 422
https://github.com/dmtrkovalenko/fff Readme MIT 9.6 MiB
Languages
Rust 62.1%
Lua 15.2%
TypeScript 15.1%
C 1.9%
Python 1.8%
Other 3.8%