← Vim研究所

Windows 10/11にNeovimを最短でインストールする方法

2026-08-03 公開 ・ 更新: 2026-11-05 ・

WindowsへのNeovim導入というと、公式サイトからzipをダウンロードして手動で配置する方法を紹介した記事をよく見かけます。しかし今は、標準搭載のパッケージマネージャーであるwingetを使えばコマンド1行で済みます。

Windows 10は2025年10月14日にサポートが終了しました。MicrosoftのWindows 10のサポート終了案内によれば、拡張セキュリティ更新プログラムに登録した端末は2027年10月12日まで更新を受け取れます。Neovimが求めるのはWindows 8以降なので、Windows 10でも手順は同じです。

この記事の確かめ方:Windowsに固有の記述は、Neovimのリリースページ、公式のインストール手順、wingetとScoopのマニフェスト、Microsoftのドキュメントで裏を取っています。筆者の作業機はmacOSなので、Windows実機で通したわけではありません。OSに依存しないnvim --version・:checkhealth・stdpath()・--cleanの挙動と、配布zipの中身の比較はNeovim 0.12.4で実際に手を動かして確かめました。
目次(9項目)

wingetでインストールする

Windows 10・11には、Microsoft公式のパッケージマネージャーwingetが標準で入っています。Microsoftのドキュメントによると「アプリ インストーラー」の一部として配布され、Windows 10は1809(ビルド17763)以降が対象です。入っていなければMicrosoft Storeで更新すれば使えます。PowerShellかWindows Terminalで次を実行するだけです。

winget install -e --id Neovim.Neovim

このとき裏で走るのは公式のMSIです。winget公式リポジトリのNeovim.NeovimのインストーラーマニフェストにはScope: machineとあり、導入先は%ProgramFiles%\Neovim、依存としてVisual C++再頒布可能パッケージが指定されています。マシン全体への導入なので、管理者権限のないターミナルから叩くとUACの昇格を求められ、断れば失敗します。

インストールが終わったら、ターミナルを開き直してからnvimで起動します。同じセッションのままだとコマンドが認識されないことがあり、これは気分の問題ではありません。Neovimのリポジトリにあるcmake.packaging/WixPatch.xmlを見ると、MSIが書き足すのはユーザー単位ではなくシステム側のPATHです。すでに起動しているプロセスは古い環境変数を抱えたままなので、開き直すまで新しいPATHを知りません。

nvim --version

バージョンが表示されればインストール完了です。ただし0.12系のnvim --versionはかなり短くなっていて、手元のmacOSで実行すると次の4行しか出ません。

NVIM v0.12.4
Build type: Release
LuaJIT 2.1.1785763465
Run "nvim -V1 -v" for more info

設定ファイルの場所はここには出ません。案内どおりnvim -V1 -vまで進めても、増えるのは対応するVimのバージョンやシステム用のsysinit.vimなどで、設定ファイルの場所は出てきません。調べ方は後の節で扱います。

更新はwinget upgrade Neovim.Neovimで済みます。最新安定版は2026年8月23日公開のNeovim 0.12.5で、winget・Scoop・Chocolateyのいずれも同じ版に追いついていました。ARM版Windowsもマニフェストにarm64があるのでコマンドは同じです。

NeovimのGitHubリリースページ。Nvim 0.12.4のLatest表示と、Windows向けのZipとMSIそれぞれの導入手順が箇条書きで並んでいる
Neovimのリリースページ(github.com/neovim/neovim/releases/latest)。2026年8月時点。ページ内にWindows向けの手順が書かれている

winget・Scoop・zipの選び分け

3つの入れ方の差は、突き詰めると管理者権限が要るか、PATHを書き換えるのが誰か、更新をどう回すかの3点に集約されます。各パッケージのマニフェストと公式の手順を突き合わせると、次のように分かれます。

入れ方権限とPATH更新
wingetMSIをマシン全体に入れる。UACの昇格が要る。システムのPATHにbinが足されるwinget upgrade Neovim.Neovim
Scoopzipをユーザーのフォルダに展開する。管理者権限は不要で、Scoopのshims経由で呼ぶscoop update neovim
zip手動好きな場所に展開するだけ。PATHは自分で通す(通さなくても実行はできる)入れ直し

Scoopなら、公式の手順どおりmainバケットを足してから入れます。

# mainバケットを追加してからNeovimを入れる
scoop bucket add main
scoop install neovim

Scoopのneovimマニフェストが取りに行くのはnvim-win64.zipで、MSIではありません。だから管理者権限が要らず、システムのPATHにも触りません。代わりにnvim.exeへshimが張られ、Scoopが最初から通しているユーザーのPATHから呼べます。

Chocolateyも生きています。公式のインストール手順にchoco install neovimが載っており、コミュニティリポジトリの最新版は2026年8月24日公開の0.12.5でした。すでにChocolateyで開発ツールを管理しているなら揃え直す必要はありません。

zipを手動配置する方法(wingetが使えない場合)

社内ポリシーなどでwingetが使えない環境では、従来どおりzipを手動展開する方法も使えます。

  1. Neovim公式リポジトリのリリースページから、64bit版ならnvim-win64.zipを、ARM版Windowsならnvim-win-arm64.zipをダウンロードします
  2. 任意のフォルダ(例: C:\Program Files\Neovim)に展開します
  3. 展開したフォルダ内のbinを環境変数PATHに追加します

3番目は必須ではありません。公式の手順はzipについてこう書いています。

Unzip the package. Any location is fine, administrator privileges are not required. $VIMRUNTIME will be set to that location automatically.

展開した場所がそのまま$VIMRUNTIMEになるので、PATHを通さなくてもbin\nvim.exeを直接叩けば起動します。PATHに足すのは、どのフォルダからでもnvimと打てるようにするための後付けです。この性質のおかげでNeovimのポータブル運用も成り立ちます。

入れた直後に確かめる3つのこと

1つめは、nvimがどこの実体を指しているかです。cmd.exeならwhere nvimで場所が出ますが、PowerShellでは同じ綴りが通じません。whereはMicrosoftのドキュメントが明記するとおりWhere-Objectのエイリアスで、実体を探すにはwhere.exeかGet-Commandを使います。

rem cmd.exe の場合
where nvim
# PowerShell の場合。where は Where-Object のエイリアスなので使わない
Get-Command nvim

2つめは設定ファイルの置き場所です。Windowsでは~/AppData/Local/nvimの下にinit.luaかinit.vimを置きます。ただしここは推測せず、Neovimに直接聞くのが確実です。起動して次のコマンドを打つと、その環境で実際に読まれるフォルダが返ります。

:echo stdpath("config")

手元のmacOSで環境変数HOMEを一時フォルダに向けて実行したところ、stdpath("config")はその配下の.config/nvimを返しました。Windowsでは同じ関数がAppData\Local\nvimを返します。4つの置き場所とXDG_CONFIG_HOMEでの変え方はWindows版Neovimの設定ファイルの配置場所にまとめてあります。

3つめが:checkhealthです。Neovim 0.12では6項目が順に検査されます。うちvim.healthが版と$VIMRUNTIMEと外部ツールを、vim.providerがNode.jsやPythonとの連携を見ます。入れたてで出る警告のうち、設定ファイルが見つからないという指摘は書いていないだけ、新しい版があるという指摘は手元が1つ古いだけです。プロバイダーの警告も、その言語のプラグインを入れるまでは放っておけます。

本当に困るのは、設定を書き始めてから起動しなくなったときです。そのときはnvim --cleanで立ち上げて切り分けます。:help --cleanには「Loads builtin plugins, unlike "-u NONE -i NONE".」とあり、利用者の設定だけを外して標準添付のプラグインは読む点が-u NONEとの違いです。-u NONEは構文ハイライトまで止まるので、素の挙動を見たいとき用です。

GUIで使いたい場合

Neovim本体はターミナル上で動くのが基本ですが、GUIクライアントとして使いたい場合の選択肢もいくつかあります。

ここで1つ、古い説明が残りやすい点があります。かつてWindows版の公式zipにはnvim-qt.exeが同梱されていましたが、今は入っていません。手元でリリースzipの中身を並べたところ、0.9.5にはbin/nvim-qt.exeとQtのDLL群がありましたが、0.10.4・0.11.4・0.12.5ではnvim.exe・xxd.exe・win32yank.exeなどだけでした。Neovimを入れればGUIも付いてくる、という前提はもう成り立ちません。

いずれもwingetで導入できます。パッケージIDはNeovideがNeovide.Neovide、nvim-qtがequalsraf.neovim-qtで、本体とは別プロジェクトなので発行元の名前がそのままIDに出ます。Neovideなら次のコマンドになります。

winget install -e --id Neovide.Neovide

init.luaを置いてlazy.nvimでプラグインを入れる

素のNeovimでも最低限の編集はできますが、実用的に使うには設定ファイルとプラグイン管理の仕組みが欠かせません。設定ファイルは、前の節でstdpath("config")が返したフォルダにinit.luaとして置きます。Windowsの既定なら%LOCALAPPDATA%\nvim\init.luaで、フォルダが無ければ作ります。Vim scriptのinit.vimでも書けますが、両方を同じフォルダに置くと起動のたびに次のエラーが出ます。Neovim 0.12.6で、init.luaとinit.vimにそれぞれ別の変数を立てる1行を書いて起動したところ、読まれたのはinit.luaだけで、init.vimの中身は無視されました。

E5422: Conflicting configs: "~/.config/nvim/init.lua" "~/.config/nvim/init.vim"

プラグインマネージャーはlazy.nvimが広く使われていて、Neovim 0.12以降は本体に組み込まれたvim.packも選べます。lazy.nvimなら、公式のインストール手順にあるブートストラップのコードをinit.luaの先頭に置きます。初回の起動でlazy.nvim自身がgit cloneされ、以降はsetupの中にプラグインを足していくだけです。そのためgitにPATHが通っている必要があります。

local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
  local lazyrepo = "https://github.com/folke/lazy.nvim.git"
  local out = vim.fn.system({
    "git", "clone", "--filter=blob:none",
    "--branch=stable", lazyrepo, lazypath,
  })
  if vim.v.shell_error ~= 0 then
    vim.api.nvim_echo({
      { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
      { out, "WarningMsg" },
      { "\nPress any key to exit..." },
    }, true, {})
    vim.fn.getchar()
    os.exit(1)
  end
end
vim.opt.rtp:prepend(lazypath)

require("lazy").setup({
  -- ここにプラグインを追加していく
})

Neovim 0.12.6で、空のホームにこのコードだけを置いて起動すると、stdpath("data")の下にlazy/lazy.nvimが作られ、require("lazy")が読み込まれた状態になりました。vim.uv or vim.loopと両方書いてあるのは、0.10より前にはvim.loopしか無いためです。0.10以降はvim.uvが正式で、vim.loopはdeprecated.txtに載る非推奨扱いですが、0.12.6ではまだ両方とも存在していました。自分で書くコードはvim.uvに寄せておくと安全です。

ゼロから組む代わりにkickstart.nvimやLazyVimから始める方法もあります。

dein.vimで組んだ設定があるとき

WindowsにNeovimを入れる手順では、長くdein.vimが定番のプラグインマネージャーでした。今もgit cloneしてruntimepathに足せば動きますが、作者がREADMEで開発の終了を明言しています。

Active developement on dein.vim has stopped. The only future changes will be bug fixes.

後継として案内されているのは、同じ作者のdpp.vimです。バグ修正は続くとされ、動作要件もVim 8.2以上、Neovim 0.8.0以上、Git 2.4.11以上のままなので、今動いている設定を慌てて移す必要はありません。これから組むならlazy.nvimのほうが情報を見つけやすく、移すときの書き方はおおよそ次のように対応します。

dein.vimlazy.nvim
call dein#add('user/repo'){ "user/repo" }
dein#begin()〜dein#end()で囲むrequire("lazy").setup({ ... })の中に並べる
set runtimepath+=で手動追加ブートストラップのvim.opt.rtp:prepend(lazypath)
dein#check_install()/dein#install()起動時に自動で入る。手動なら:Lazyの画面から

設定の言語もinit.vimからinit.luaに移ることになるので、上のE5422を避けるため、移し終えたinit.vimは消すか名前を変えて退避します。

なおnvimとvimは別のコマンドです。ここまでの手順で入るのはnvim.exeだけなので、vimと打っても起動しません。Windowsには標準でどちらも入っていないため、以前にgVimを入れたか別のツールが同梱していなければ、vimは最初から通らないコマンドです。

Python連携を使うなら

一部のプラグインはPython3連携(pynvim)を前提にしています。使う予定があるなら、Pythonを入れたうえでpynvimを足しておきます。

winget install -e --id Python.Python.3.12
pip install pynvim

Neovimがどのpythonを見ているかは:checkhealth vim.providerで分かります。pynvimが無い状態だと、Neovim 0.12.6では次のように「import neovimできるPythonが見つからない」と警告されました。

Python 3 provider (optional)
- ⚠ WARNING No Python executable found that can `import neovim`.
  Using the first available executable for diagnostics.
- ⚠ WARNING Could not load Python :
  /usr/bin/python3 does not have the "neovim" module.

見出しにoptionalとあるとおり、Python連携を使わないなら放っておいて構いません。使う場合は、警告に出たPythonに対してpip install pynvimを実行します。複数のPythonが入っていて狙ったものが使われないときの対処はVim/NeovimでPythonの実行パスを設定する記事に、LSPやフォーマッタまで含めた組み方はWindowsでNeovimをPython開発環境にする手順にあります。

使ってみて

この記事を書くまで、公式のzipを展開すればGUI版も一緒に付いてくるものだと思い込んでいました。手元で0.9.5から0.12.5までのzipを並べて中身を見比べて、0.10.4以降にはnvim-qt.exeもQtのDLLも入っていないと分かったときは、自分が読者に配ろうとしていた手順が古かったことに気づかされました。

まとめ

最短ルートはwinget install -e --id Neovim.Neovimの1行です。ただ、一次情報をたどって分かったのは、つまずく場所が本体ではなく周辺に寄っていることでした。入らないのではなく、入ったのに動いていないように見えるだけなので、どこを見るかを先に知っておけば数分で片が付きます。入ったあとはinit.luaを1つ置いてlazy.nvimのブートストラップを書けば、プラグインが動く状態まで進めます。Python連携は使うプラグインが求めたときにpynvimを足せば十分で、dein.vimの設定が動いているなら急いで移す必要もありません。

関連記事

← Vim研究所 トップへ戻る