Neovimの標準ファイラがnetrwからdirへ netrwは残るのか
nvim .と打つと出てくる、あの罫線とヘルプ付きの一覧。長いあいだVimとNeovimの標準ファイラだったnetrwの画面ですが、Neovim 0.13ではこれが出なくなります。代わりにdirという新しい組み込みプラグインが、ファイル名だけを並べた素の一覧を出します。ディレクトリブラウザの実装は2026年6月25日にmasterへ入り、次のリリースに乗る予定です。netrwを消すという話ではなく、netrwが抱えていた仕事のうち「ローカルのディレクトリを一覧する」部分だけを小さなLuaに引き剥がした、という形の変更です。
検証環境:nightlyビルドのNVIM v0.13.0-dev-1336+g8c0bf18374(macOS arm64、2026-08-18時点)と、安定版のNVIM v0.12.4を並べて確認しました。本文の一覧の中身・マッピング数・オプション値は、どちらも--cleanで起動して取った実測値です。0.13は開発中なので、リリースまでに細部が変わる可能性があります。
目次(7項目)
| キー | これだけ覚える |
|---|---|
| Enter | カーソル行のファイル・ディレクトリを開く |
| - | 親ディレクトリを開く(一覧の中でも、編集中のファイルからでも) |
| R | 一覧を読み直す |
:Explore | 従来どおりnetrwを開く |
ディレクトリを開いたときに出るものが変わる
まず見た目です。0.12.4でnvim demoを実行すると、先頭7行が罫線とバナーで埋まった従来のnetrwが開きます。
" ============================================================================
" Netrw Directory Listing (netrw v184)
" /tmp/demo
" Sorted by name
" Sort sequence: [\/]$,*,\(\.bak\|\~\|\.o\|\.h\|\.info\|\.swp\|\.obj\)[*@]\=$
" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:special
" ==============================================================================
../
./
docs/
src/
.gitignore
README.md
init.lua
同じディレクトリを0.13のnightlyで開くと、こうなります。
docs/
src/
.gitignore
README.md
init.lua
バナーも../も./もありません。ディレクトリが先で末尾にスラッシュが付き、そのあとにファイルが名前順で並ぶだけです。ドットファイルは既定で表示されます。バッファのfiletypeはnetrwではなくdirectoryになり、buftypeはnowrite、modifiableはfalseです。つまりこの一覧は読み取り専用で、行を書き換えてファイル名を変える、といった操作は用意されていません。
差がいちばん分かりやすいのはバッファローカルのマッピング数でした。0.12.4のnetrwバッファでは94本のノーマルモードマッピングが定義されていたのに対し、0.13のディレクトリバッファでは2本です。netrwがDで削除、Rで改名、mfやmtでマークによるコピー・移動まで抱えていたのに対して、新しい一覧は「開く・上へ・読み直す」しか持ちません。
覚えるキーは3つだけ
用意されているのはEnter(カーソル行を開く)、-(親ディレクトリ)、R(読み直し)の3つです。実体は<Plug>(nvim-dir-open)、<Plug>(nvim-dir-up)、<Plug>(nvim-dir-reload)で、別のキーに割り当て直せます。すでに同じキーを自分で使っている場合は、既定のマッピングのほうが張られません。
気が利いていると感じたのが-で、これはディレクトリバッファの中だけでなく、普通にファイルを編集しているときにも効くグローバルなマッピングです。demo/src/main.luaを開いた状態で-を押すとdemo/src/の一覧に切り替わり、しかもカーソルはmain.luaの行に置かれます。手元で試したところ、そこでEnterを押せば元のファイルに戻ってきました。ファイルの行き来を頻繁にする人にとっては、vim-vinegarがやっていたことが本体に入ったと考えると近いです。
カウントも付けられます。3-なら3階層上、1-だけは特別扱いで、グローバルなカレントディレクトリを開きます。また一覧に移っても代替ファイルは保持されるので、Ctrl-^で直前のバッファに戻れます。
もうひとつ実測で確認できたのが、カレントディレクトリの扱いです。0.12.4のnetrwでは一覧を開いてもプロセスのカレントディレクトリは変わりませんでしたが、0.13のディレクトリバッファは:bcdによってバッファローカルのカレントディレクトリがその場所に設定されます。一覧を見ながらgfや:!を打ったときに、目で見ている場所が基準になります。
netrwは消えていない
ここが誤解されやすいところで、netrwは削除されていません。0.13のnightlyでも:Exploreを実行すれば、バナー付きのいつもの画面が開きます。実際に確認するとfiletypeはnetrw、g:loaded_netrwにはv184が入りました。コマンドの定義は起動時に読み込まれていて、netrw本体は最初に使ったときに読み込まれます。Explore系のコマンドはそのまま使えます。
役割分担は次のようになります。
| やること | 0.12まで | 0.13 |
|---|---|---|
| ローカルのディレクトリを開く | netrw | dir |
:Explore系 | netrw | netrw |
| scp/sftp越しの編集 | netrw | netrw |
| ファイルの削除・改名・コピー | netrw | netrw(dirには無い) |
リモートのファイルを直接編集する用途は引き続きnetrwの担当です。SCPやSFTPでの編集を使っている人は、そこは何も変わりません。
従来どおりディレクトリを開いたらnetrwが出る状態に戻したい場合は、設定の先頭で新しいプラグインを止めます。実際に指定して起動するとfiletypeがnetrwに戻ることを確認しました。
-- init.lua の先頭に置く
vim.g.loaded_nvim_dir_plugin = 1
ひとつ注意が要るのは、書庫の扱いが同時に変わっている点です。zipプラグインもdirの上に載る読み取り専用のアーカイブブラウザとして書き直されました。netrwのマークによる圧縮・解凍のように書き換えを伴う使い方をしていた場合は、:packadd old-zipで従来の実装を読み込みます。
並び替えとドットファイルの非表示
一覧が素っ気ない代わりに、加工用の入口が1つ用意されています。一覧を描き終えるたびにDirReadPostというUserイベントが発生し、そのあいだだけバッファが書き込み可能になります。ここでソートや削除を普通のコマンドで行える仕組みです。ヘルプに載っている書き方をそのまま試したところ、どちらも意図どおりに動きました。
" ドットファイルを隠す
autocmd User DirReadPost silent keeppatterns g/^\./d _
" ディレクトリを後ろに回す
autocmd User DirReadPost silent keeppatterns sort r /\/$/
前者を入れた状態でdemoを開くと.gitignoreだけが消え、Rで読み直しても消えたままでした。更新時刻順に並べ替えるような処理も、行を並べ替えるLua関数を書けば同じ入口で実現できます。
制約として、残す行はエントリ名そのものである必要があります。マッピングはカーソル行の文字列とバッファ名を突き合わせてパスを組み立てるので、アイコンやサイズを行に書き足すとEnterが存在しないパスを開こうとします。表示を飾りたくなったら、この一覧ではなくファイラープラグインの領分だと考えたほうが安全です。
なぜ削るほうへ動いたのか
netrwはローカルのディレクトリ表示、リモートアクセス、書庫の展開、spellファイルのダウンロード、ファイル操作までを1つのVim scriptプラグインで抱えていました。長年メンテナ不在のまま不具合が残り、それでいて他の機能から呼ばれるので外せない、という状態が続いていました。今回の変更は、そのうち最も使われる部分だけを小さく作り直したものです。実装をまとめたプルリクエストでも、規模を抑えることが意図的だと書かれています。
It's good that this initial impl is very small (almost no mappings etc.), because we really need to focus on getting the core right before building on it.
実際、一覧を作るコードはプロバイダという小さな取り決めに分かれていて、ファイルシステム用の実装は100行あまりしかありません。zipの中身をこの一覧の上に載せられたのは、この分け方があるからです。vim.packや標準LSPと同じで、外部プラグインの真似をするのではなく、土台だけを本体に置いて上物は各自に任せる方向がここでも通っています。
0.13が来たときに影響が出る設定
今のうちに見ておいたほうがよいのは次の3つです。まず-を自分で別の用途に割り当てている場合ですが、これは既存のマッピングがあれば既定の割り当てが行われないので、黙って奪われる心配はありません。
次にg:netrw_で始まる設定です。バナーの非表示やツリー表示への切り替えのような設定は、ディレクトリを開いたときの画面には効かなくなります。:Exploreで開いたnetrwには従来どおり効くので、設定を消す必要はありません。
3つ目はnetrwのキーでファイル操作をしていた場合です。新しい一覧には削除も改名も無いため、:Exploreを使うか、ファイル操作まで面倒を見るプラグインを入れることになります。ファイラープラグインの比較で触れたoil.nvimのように、バッファを編集することでファイル操作を表現するものを使っている人は、そもそもディレクトリを開く処理を自前で乗っ取っているので影響を受けません。
nightlyを落として最初にやったのは、いつもの癖でnvim .と打つことでした。バナーが無い一覧が出てきて、一瞬プラグインの読み込みに失敗したのかと思ったほど地味です。いちばん手が止まったのは、一覧の上でファイルを1つ消そうとしたときでした。Dを押しても何も起こらず、これは:Explore側の機能だと気づくまで少し考えました。逆に良かったのが-で、編集中のファイルから押すと親ディレクトリに移り、そのファイルの行にカーソルが乗ります。今回は隔離した検証用ディレクトリで数時間触っただけなので、常用したときにドットファイルの多さが気になるかどうかまでは判断できていません。
まとめ
Neovim 0.13では、ディレクトリを開いたときに出る一覧がnetrwから新しいdirプラグインに変わります。覚えるキーはEnterと-とRの3つだけで、削除や改名は持たない読み取り専用の一覧です。netrw自体は残っていて:Exploreやリモート編集は従来どおり動くので、慌てて設定を捨てる必要はありません。並び順やドットファイルの扱いを変えたいときはDirReadPostで加工し、以前の挙動に戻したいときはvim.g.loaded_nvim_dir_pluginを立てます。NeovimとVimの違いがまた1つ増えた形で、Vim側のnetrwは当面そのままです。