oil.nvim edits a remote server's files the same way it edits a local directory: as text
Renaming, moving, and deleting a file are edits to a line, and the plugin deletes for good unless trash is switched on first.
Deleting a line in oil.nvim deletes the file behind it
oil.nvim opens a directory not as a tree or a picker but as an
ordinary Neovim buffer: one line per entry, editable with the same
commands that edit any other text.1
A line is a file. Delete the line with dd, the same key
that deletes a line of prose anywhere else in Neovim, and on write the
file it named is gone.2
Open a line and type a new name over the old one, and the file is
renamed. Yank a line and paste it into a different directory's
buffer, and the file moves. None of this is a special mode or a
feature bound to its own keymap. It is the editor doing what the
editor already does, aimed at a buffer whose lines happen to be
filenames.
oil.nvim stages every edit
in the buffer and does nothing to the filesystem until the buffer is
written. The documentation lists the create, rename, move, copy, and
delete operations it recognizes. Separately, one option controls
whether a batch of them asks for confirmation before it
runs.2 It can also
stand in for Neovim's built-in netrw entirely: it ships
a setting that makes it the default handler for any directory
buffer.2 Once that
setting is on, opening a directory no longer opens netrw's
read-only listing of names. It opens a buffer you can type into.
A single :w moves a file, renames three more, and deletes a fourth
The buffer model does not stop at one directory. Two oil buffers can be open in a split at once, one per directory, and a write commits both. The plugin's own FAQ names this directly: "You want to perform cross-directory actions. AFAIK there is no other plugin that does this."1 A mutation layer behind the buffer tracks each edit and translates it into a filesystem operation when the write commits.3 A workflow that would otherwise be a shell script becomes a multi-cursor edit.
require("oil").setup({
default_file_explorer = true, -- oil replaces netrw outright
delete_to_trash = true, -- flip the permanent-delete default
skip_confirm_for_simple_edits = false,
watch_for_changes = true,
view_options = { show_hidden = true },
columns = { "icon", "permissions", "size", "mtime" },
})
vim.keymap.set("n", "-", "<CMD>Oil<CR>", { desc = "Open parent directory" })
vim.keymap.set("n", "<leader>of", "<CMD>Oil --float<CR>", { desc = "Oil in a float" })
With that config running, retiring a batch of stale fixtures looks
like this: split windows on src/widgets/ and
tests/widgets/, both opened as oil buffers. Visual-block
select the five fixture lines in the tests buffer and delete the
block. Switch to the src buffer, open the line for the module those
fixtures covered, and retype its name to match the replacement
module landing in the same change. One :wa commits
both buffers: five deletes fire against
tests/widgets/, one rename fires against
src/widgets/, and nothing on disk changes until that
write. An independent user who moved from Emacs's dired
ran the same cross-buffer motion and confirmed it directly: opening
two oil buffers and moving lines between them "works exactly as
expected."5 A separate
independent write-up shows the same shape of task at the command
level: one substitute command run against the buffer, followed by
:w, renames every matching file in the batch at
once.6
oil-ssh:// depends on the shell tools already on the remote box
The same buffer model reaches past the local disk. An adapter layer
sits between the buffer and the filesystem it edits, and swapping
the adapter swaps what "filesystem" means. The plugin states the
mechanism in its own words: file operations "work across adapters,"
so "you can use oil to copy files to/from a remote server using the
ssh adapter just as easily as you can copy files from one directory
to another on your local machine."1
:Oil oil-ssh://user@host/var/www
opens a remote directory the identical way, and, as of the plugin's
May 2026 release, oil-s3:// does the same for an S3
bucket.14
A rename typed into a remote buffer is not copied over the wire
and deleted at the source. It is executed as a rename on the far
end, because the adapter translates the same mutation calls it
would send locally into whatever the remote backend understands.
The claim to test is whether that translation is free, or whether
it leans on something the remote host has to supply. It leans on
something. The SSH adapter's own users have gone looking for
documentation on exactly what it expects from the far side. They
have not found enough of it: a feature request filed against the
project asks plainly for more documentation on the SSH
adapter.7 That request
means the adapter works well enough that people run it against
real servers, but not so transparently that its requirements are
obvious from the README. The practical read is that oil-ssh
assumes a fairly standard Unix shell on the other end, the same
assumption an rsync or scp workflow
already makes. A remote host that does not meet it is the case the
feature does not yet document its way around. Latency is the other
cost the abstraction cannot hide. A remote oil buffer edits real
files at the far end rather than a synced local copy, so every
preview and every write pays the round trip. A slow connection
turns a fast edit workflow back into a slow one, no matter how thin
the plugin's own overhead is.
delete_to_trash defaults to false, and a stray dd is permanent
The same property that makes oil.nvim fast, that a delete is just a
line disappearing and a write, is also what makes it dangerous by
default. The documented default for delete_to_trash is
false. An oil delete is a real filesystem delete, not a move to a
recoverable trash location, unless that option is turned
on.2
The plugin does implement trash integration, following the
FreeDesktop specification on Linux and the native trash on macOS
and Windows, so the safety net exists.2
It is opt-in, not assumed.
That default carries a real cost on its own. A new user arriving
from a file manager where trash is already on may not think to
flip this setting before a first big batch edit, and
delete_to_trash's own default is what fails them if
they don't. A second, separate risk shows that flipping it is not
a complete guarantee either. One user running with
delete_to_trash = true still lost a file. They
deleted it with dd, created a new directory, pasted
the file back in with p, and saved. The paste did not
survive the write, a bug in the mutation path itself, not a missed
setting.8 Turning
trash on closes the first risk. It does not close the second. The
first costs one line in the setup call, already flipped in the
config above. The second has no config fix yet: it is an open bug
report against the project, not a setting to change.
A tree stays open on screen; an oil buffer closes when the edit is done
oil.nvim is not the only plugin that turns file management into
something other than netrw's bare listing. nvim-tree,
neo-tree, and mini.files each keep a
persistent panel open, a tree the editor's other windows arrange
themselves around. oil.nvim's buffer is not a panel. It occupies a
normal window, and when the edit is done and the buffer closes,
nothing keeps a slot reserved for it. One independent comparison
frames the difference directly: oil suits someone who already
prefers a "split windows and the project drawer" workflow over a
tree that never goes away.9
netrw's own strength sits elsewhere, in remote-editing protocols
built up over years that oil does not try to replace outright.
A second independent account describes migrating away from
mini.files, calling it "excellent, extremely fast to
operate," in favor of oil's buffer model for multi-file batch
edits.10 The trade was
not free. A plain buffer, unlike a tree, gives up the
always-visible sense of where you are in a deep directory, so that
account added back a keymap to the project root and a custom
winbar.10
| Tool | Screen model | You edit files by |
|---|---|---|
| netrw | buffer, read-mostly | single-file commands and its own built-in remote protocols |
| mini.files / neo-tree | persistent side panel | tree navigation and panel-specific keybindings |
| oil.nvim | ordinary buffer, closes with the window | normal Vim text edits, committed on write |
Adoption cost tracks that difference closely. Someone switching
from netrw and vim-vinegar describes the move to oil as intuitive,
because none of their existing Vim motions had to be relearned,
only redirected at a new kind of buffer.11
They paired it with fzf-lua for jumping straight into
a directory, rather than clicking through a tree to find it. The
friction that remains is keymap fluency, not configuration: one
independent adopter's advice after switching from Emacs is to
memorize "at least some" of the default keymappings up front, for
"a smoother experience."5
One maintainer ships every release for a plugin with 6,800 stars
The release history is not the straightforward story a changelog skim suggests. Through 2024 the plugin shipped roughly monthly: v2.9.0 in May, v2.13.0 by November, v2.14.0 in December, and v2.15.0 on February 13, 2025.4 Then releases stopped. The next version, v2.16.0, did not ship until May 24, 2026, a gap of fifteen months. It landed a new adapter for S3 buckets, horizontal scrolling actions, multicursor.nvim support, and more than twenty-five bug fixes across the SSH adapter, trash handling, and LSP integration.4 A burst of work followed a long silence, not a project that never slowed down.
That silence is not incidental to the sustainability question. It is the reason the question got asked. A community member opened an issue in February 2026, three months before v2.16.0 shipped, during the gap rather than after it. The repository had reached 6.8 thousand stars, and stevearc had said openly that he has "very little free time."12 The discussion proposed co-maintainers or some form of shared governance to keep pace with a plugin popular enough that, in the discussion's words, it "ought to be very, very actively maintained."12 v2.16.0 landing a few months later shows the gap was not abandonment. It does not resolve the underlying risk: every release, fast or slow, still ships from one person's queue. A fork, a security report, or a breaking Neovim API change lands there too, and nothing in the record says the next gap will be shorter.
- A batch of renames, moves, and deletes across more than one directory commits on a single write, backed by the plugin's own FAQ and an independently reproduced bulk-rename example, not just a paraphrase of the README.16
- The identical buffer model opens a remote directory over SSH or an S3 bucket, using the same "across adapters" operations the plugin documents for local moves.14
- Adoption cost is close to zero for an existing Vim user: the motions transfer directly, and the default configuration needs no scripting to get bulk edits working.115
-
Deletion is permanent unless
delete_to_trashis switched on by hand.2 -
Turning trash on is not a full guarantee: a separate paste
bug has destroyed a file even with
delete_to_trash = trueenabled.8 - The SSH adapter assumes standard Unix tooling on the remote host, and its own users say the documentation does not yet spell out what it requires.7
- Every release ships from one maintainer with acknowledged limited time, against a project with 6.8 thousand stars and a recent fifteen-month gap between releases.12
- Requires Neovim 0.10 or newer.1
None of that argues against adopting it. It argues for adopting it the way the config above does. Turn trash on before the first batch edit, not after the first loss, and don't treat it as a complete guarantee once it is on. Treat the SSH adapter as something to test against a real remote host before trusting it on one that matters. The buffer model itself is not the risk here. The risk sits in the defaults left untouched, in a bug that outruns even the safety net, and in a maintenance queue with one name on it.
Sources
- GitHub · stevearc/oil.nvim README
- stevearc/oil.nvim · doc/oil.txt
- DeepWiki · stevearc/oil.nvim architecture overview
- stevearc/oil.nvim · CHANGELOG.md
- hung.yi · Oil.nvim, an Emacs dired user's adoption notes
- VimTricks · oil.nvim as a filesystem editor
- GitHub · oil.nvim issue #525, SSH adapter documentation request
- GitHub · oil.nvim issue #743, file lost to a paste bug with trash enabled
- Paweł Grzybek · Neovim file explorers compared
- Daniel Penedo · From mini.files and neo-tree to oil in Neovim
- Yeri Pratama · A better file explorer workflow in Neovim
- GitHub · oil.nvim issue #726, maintenance sustainability discussion