Vimを現代に再構築!拡張性と使いやすさを極めたテキストエディタ — neovim

neovim/neovimVim Script98.1k

Neovimは、プログラマーに長年愛されてきたテキストエディタ「Vim」を、現代の開発環境に合わせて大幅に改良したソフトウェアです。Vimの操作性はそのままに、他のプログラミング言語やツールとの連携を大幅に強化し、美しいGUI(グラフィカルな操作画面)やプラグイン(追加機能)を簡単に導入できるようになっています。エディタ内にターミナル(コマンド入力画面)を埋め込んだり、複数のプログラムを同時に動かしたりする機能も備わっています。主にプログラマーやシステム管理者など、キーボード操作でテキストを高速に編集したい人に向けたツールです。

🔥 なぜ話題?

AIコーディングアシスタントとの連携プラグインが急速に充実しており、Neovimの高い拡張性がAI時代のエディタとして再注目されています。また、Lua言語による設定の書きやすさやLSP(言語サーバー)のネイティブサポートにより、VS Codeからの移行を検討する開発者が増えていることも背景にあります。

💡 こう使える!

例えば、Webアプリを開発しているプログラマーが、Neovimにコード補完プラグインやファイル検索プラグインを入れて、コードを書きながらエディタ内のターミナルでサーバーを起動し、すべての作業を一つの画面内で完結させるといった使い方ができます。

ユースケース: プログラマーがコードを高速に編集・管理し、自分好みにカスタマイズした開発環境を構築するために使うテキストエディタ。

  • Vimとの高い互換性を保ちつつ、APIや非同期処理など現代的な機能を追加
  • 17以上のプログラミング言語からAPIで操作でき、自由自在にカスタマイズ可能
  • エディタ内にターミナルを内蔵し、開発作業を一画面で完結できる
GitHubで見る →

Vim-fork focused on extensibility and usability

技術情報

言語

Vim Script

ライセンス

NOASSERTION

最終更新

2026-04-01

スター数

98,054

フォーク数

6,713

Issue数

1,932

トピック

apicluaneovimnvimtext-editorvim

技術詳細

アーキテクチャ・仕組み

  • NeovimはVimのソースコードをフォーク(分岐)して大幅にリファクタリングしたプロジェクト
  • ビルドシステムにはCMakeを採用(便利用にMakefileも提供)
  • 内部は以下のサブシステムで構成:
    • API サブシステム: 外部プログラムからNeovimを操作するためのインターフェース
    • Vimscript サブシステム: Vim互換のスクリプト言語の実行環境
    • Lua サブシステム: Luaによるスクリプティング環境(高速な設定・プラグイン開発が可能)
    • msgpack-RPC サブシステム: プロセス間通信のためのRPC(リモート呼び出し)機能
    • event-loop サブシステム: 非同期イベント処理の基盤
    • TUI: 組み込みのターミナルUI

主要な機能一覧

  • モダンGUIサポート: コアを変更せずに高度なGUIフロントエンドを接続可能
  • 多言語APIアクセス: C/C++, C#, Clojure, D, Elixir, Go, Haskell, Java/Kotlin, JavaScript/Node.js, Julia, Lisp, Lua, Perl, Python, Racket, Ruby, Rustからの操作が可能
  • 組み込みターミナルエミュレータ: エディタ内でスクリプト可能なターミナルを利用可能
  • 非同期ジョブ制御: バックグラウンドで処理を実行可能
  • 共有データ(shada): 複数のNeovimインスタンス間でデータを共有
  • XDGベースディレクトリ準拠: Linux標準の設定ファイル配置に対応
  • Vimプラグインとの互換性: RubyやPythonプラグインを含む大半のVimプラグインが動作

対応環境・プラットフォーム

  • OS: Windows、macOS、Linux
  • パッケージマネージャー: Homebrew, Debian, Ubuntu, Fedora, Arch Linux, Void Linux, Gentoo 等で配布
  • プリビルドバイナリがGitHub Releasesで提供されている

Vimからの移行

  • :help nvim-from-vim に移行手順が記載されており、Vimユーザーがスムーズに移行できるよう配慮されている

ライセンス

  • コミット b17d96 以降のNeovim独自の貢献は Apache 2.0 ライセンス
  • Vimから引き継がれたコード(vim-patch トークンで識別)は別ライセンス
  • 商用利用は Apache 2.0 の範囲で可能

プロジェクト構造

├─ cmake/           CMakeユーティリティ
├─ cmake.config/    CMake定義
├─ cmake.deps/      依存関係のフェッチ・ビルド用サブプロジェクト
├─ runtime/         プラグインとドキュメント
├─ src/nvim/        アプリケーション本体のソースコード
│  ├─ api/          APIサブシステム
│  ├─ eval/         Vimscriptサブシステム
│  ├─ event/        イベントループ
│  ├─ generators/   コード生成(プリコンパイル)
│  ├─ lib/          汎用データ構造
│  ├─ lua/          Luaサブシステム
│  ├─ msgpack_rpc/  RPCサブシステム
│  ├─ os/           低レベルプラットフォームコード
│  └─ tui/          組み込みUI
└─ test/            テスト

ビルドのヒント

  • cmake --build build --target help で全ビルドターゲットを一覧表示
  • build/CMakeCache.txt でCMake変数の解決値を確認
  • build/compile_commands.json でコンパイラの完全な呼び出し情報を確認

インストール・クイックスタート

パッケージからインストール

Windows、macOS、Linux向けのビルド済みパッケージがReleasesページにあります。

各OSのパッケージマネージャーでもインストール可能です:

# macOS (Homebrew)
brew install neovim

# Ubuntu/Debian
sudo apt install neovim

# Arch Linux
sudo pacman -S neovim

ソースからビルド

依存関係をインストール後、以下を実行:

make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install

インストール先を変更する場合:

make CMAKE_BUILD_TYPE=RelWithDebInfo CMAKE_INSTALL_PREFIX=/full/path/
make install

参考になる外部の関連記事

関連リポジトリ

Linuxの心臓部 — すべてのサービスを統括するOS基盤ソフトウェア — systemd

systemd/systemdC16.1k

systemdは、Linux(パソコンやサーバーで使われるOS)の起動からサービス管理までを一手に担う、いわばOSの「司令塔」のようなソフトウェアです。パソコンの電源を入れた瞬間からネットワーク接続や

kubernetes/kubernetes

kubernetes/kubernetesGo120.6k

Kubernetesは、コンテナ化されたアプリケーションの自動デプロイ、スケーリング、管理を行うオープンソースのコンテナオーケストレーションプラットフォームです。複数のサーバー間でコンテナを効率的に配

プロキシ接続を美しく管理!Windows・Mac・Linux対応のネット環境切り替えツール — clash-verge-rev

clash-verge-rev/clash-verge-revTypeScript98.5k

clash-verge-revは、インターネットの接続方法を簡単に切り替えられるツールです。プロキシ(ネット接続の中継サーバー)の設定や管理を、見やすいグラフィカル画面で行えます。Windows、Ma

rust-lang/rust

rust-lang/rustRust88.0k

Rustはメモリ安全性と高性能を両立するシステムプログラミング言語です。ガベージコレクタなしでメモリ安全を実現する所有権システムが特徴的です。WebAssembly、OS開発、ネットワークプログラミン

異なるシステム間のデータ交換を爆速に!Googleが生んだ共通言語 — protobuf

protocolbuffers/protobufC++71.0k

Protocol Buffers(protobuf)は、Googleが開発した「構造化データを効率よくやり取りするための仕組み」です。たとえば、異なるプログラミング言語で書かれたシステム同士がデータを