Foil.nvim

Like Oil, but without boundaries.

September 24, 2025

Mass refactoring file and directory names across a large project can be a real headache. When you need to rename dozens, or even hundreds of files consistently, the usual tools like oil.nvim or neo-tree.nvim just don’t cut it. That’s exactly the problem I ran into, and it’s what inspired foil.nvim.

Foil.nvim is heavily inspired by Oil.nvim and feels familiar if you’ve used Oil, but it removes the single directory limitation. With foil.nvim, you can perform bulk renaming of files and directories across multiple roots, making large-scale refactoring much more manageable.

A practical example

Recently, I had to migrate all index-transform.ts files in an NX monorepo to JavaScript to skip the ts-node transpilation step. With more than 30 apps, this meant touching dozens of files across different directories:

apps
  - app1
    - index-transform.ts
  - app2
    - index-transform.ts
  - app3
    - index-transform.ts
  ...
  - app30
    - index-transform.ts

Update the file contents

To replace the ESM export default with CJS module.exports, I used the quickfix list and :cdo. You can check out my previous post where I explain this workflow in detail.

Rename all files from .ts to .cjs

  • 1. Open all the files you want to rename in a quickfix list.
  • 2. Execute :FoilQuickfix to open all entries in foil.
  • Display all files
  • 3. Use the :substitute command to rename .ts to .cjs
  • All files renamed
  • 4. Save the buffer

Foil.nvim handles the rest, deleting, renaming, and moving files and directories automatically. This makes mass refactoring of file and directory names across large projects quick, reliable, and much less painful.

Share

Comments (0)