
VimからNeovimへ移行した理由とLazyVimの導入
本日、長年使ってきたVimからNeovimへ完全に移行しました。さらに、LazyVimというNeovimディストリビューションを導入し、開発環境が劇的に改善されました。
なぜNeovimに移行したのか
Vimの限界を感じた瞬間
Vimは素晴らしいエディタですが、モダンな開発環境と比較すると、いくつかの課題を感じていました:
- LSP(Language Server Protocol)のサポートが弱い: 補完やリファクタリングが不便
- プラグインの設定が複雑: VimScriptの学習コストが高い
- 非同期処理のパフォーマンス: 大規模プロジェクトで動作が重くなる
- UI/UXの制限: フローティングウィンドウなどモダンな機能が限定的
Neovimの魅力
Neovimは、これらの課題をすべて解決してくれます:
✓ LSPのネイティブサポート
✓ Luaで設定を記述(シンプルで高速)
✓ 強力な非同期処理
✓ モダンなUI(フローティングウィンドウ、ポップアップなど)
✓ Tree-sitterによる高度なシンタックスハイライト
✓ 活発なコミュニティと豊富なプラグイン
LazyVimとは
設定済みNeovimディストリビューション
LazyVimは、Neovimの「いい感じの設定」を提供してくれるディストリビューションです。
公式サイト: https://www.lazyvim.org/
LazyVimの特徴:
- すぐに使える: インストール後、すぐに実用的な開発環境が整う
- 拡張性: 必要なプラグインを簡単に追加・削除できる
- モダン: LSP、Tree-sitter、Telescope、Neo-treeなど、最新のプラグインが統合済み
- 美しい: デフォルトのUIが洗練されている
- メンテナンスされている: 定期的にアップデートされる
lazy.nvimプラグインマネージャー
LazyVimの基盤となっているのが、lazy.nvimというプラグインマネージャーです。
特徴:
- 遅延読み込み: プラグインを必要な時だけ読み込むため、起動が高速
- UI: プラグイン管理画面が直感的
- 自動インストール: 設定ファイルに書くだけで自動インストール
- プロファイリング: どのプラグインが起動を遅くしているか分析可能
インストール手順
前提条件
# Neovimのインストール(Homebrew on macOS)
brew install neovim
# バージョン確認(0.9.0以上が必要)
nvim --version
LazyVimのインストール
既存のNeovim設定をバックアップしてから、LazyVimをインストールします:
# 既存の設定をバックアップ
mv ~/.config/nvim ~/.config/nvim.backup
mv ~/.local/share/nvim ~/.local/share/nvim.backup
mv ~/.local/state/nvim ~/.local/state/nvim.backup
mv ~/.cache/nvim ~/.cache/nvim.backup
# LazyVimのクローン
git clone https://github.com/LazyVim/starter ~/.config/nvim
# .gitディレクトリを削除(自分の設定として管理するため)
rm -rf ~/.config/nvim/.git
# Neovimを起動(初回起動時に自動でプラグインがインストールされる)
nvim
初回起動時、自動的にプラグインのダウンロードとインストールが始まります。数分待つと、完全な開発環境が整います。
ディレクトリ構造
LazyVimのインストール後、以下のような構造になります:
~/.config/nvim/
├── init.lua # エントリーポイント
├── lua/
│ ├── config/
│ │ ├── autocmds.lua # 自動コマンド
│ │ ├── keymaps.lua # キーマップ
│ │ ├── lazy.lua # lazy.nvimの設定
│ │ └── options.lua # オプション設定
│ └── plugins/
│ └── *.lua # プラグイン設定(ここに追加していく)
└── lazyvim.json # バージョン管理
基本的な使い方
リーダーキー
LazyVimのリーダーキーはデフォルトでSpaceです。
主要なキーバインド:
<Space> + f + f : ファイル検索(Telescope)
<Space> + f + g : Grep検索
<Space> + f + r : 最近使ったファイル
<Space> + e : ファイルツリー(Neo-tree)
<Space> + / : 現在のバッファ内検索
<Space> + q + q : 終了
# コード編集
g + d : 定義へジャンプ
g + r : 参照を表示
K : ドキュメント表示
<Space> + c + a : コードアクション
<Space> + c + r : リネーム
プラグイン管理
:Lazy
このコマンドで、プラグイン管理画面が開きます。ここから:
I: プラグインのインストールU: プラグインのアップデートX: プラグインの削除S: プラグインの同期P: プロファイル表示(起動時間の分析)
カスタマイズ
基本設定のカスタマイズ
~/.config/nvim/lua/config/options.luaで基本設定を変更できます:
-- オプション設定のカスタマイズ例
vim.opt.relativenumber = false -- 相対行番号を無効化
vim.opt.wrap = true -- 行の折り返しを有効化
vim.opt.conceallevel = 0 -- Markdown等で特殊文字を隠さない
-- クリップボード連携
vim.opt.clipboard = "unnamedplus"
キーマップのカスタマイズ
~/.config/nvim/lua/config/keymaps.luaでキーマップを追加:
local map = vim.keymap.set
-- 保存のショートカット
map("n", "<C-s>", ":w<CR>", { desc = "Save file" })
-- タブの移動
map("n", "<Tab>", ":BufferLineCycleNext<CR>", { desc = "Next buffer" })
map("n", "<S-Tab>", ":BufferLineCyclePrev<CR>", { desc = "Previous buffer" })
-- ESCでハイライトを消す
map("n", "<ESC>", ":noh<CR>", { desc = "Clear highlight" })
プラグインの追加
~/.config/nvim/lua/plugins/配下にLuaファイルを作成してプラグインを追加します。
例:~/.config/nvim/lua/plugins/copilot.lua
return {
{
"zbirenbaum/copilot.lua",
cmd = "Copilot",
event = "InsertEnter",
config = function()
require("copilot").setup({
suggestion = { enabled = true },
panel = { enabled = true },
})
end,
},
}
保存してNeovimを再起動すると、自動的にプラグインがインストールされます。
カラースキームの変更
LazyVimはデフォルトでTokyoNightテーマを使用していますが、変更可能です:
-- ~/.config/nvim/lua/plugins/colorscheme.lua
return {
{
"catppuccin/nvim",
name = "catppuccin",
priority = 1000,
config = function()
vim.cmd.colorscheme("catppuccin-mocha")
end,
},
}
便利なプラグイン・機能
LazyVimにデフォルトで含まれている便利なプラグイン:
1. Telescope(ファジーファインダー)
<Space> + f + f : ファイル検索
<Space> + f + g : テキスト検索
<Space> + f + b : バッファ一覧
<Space> + s + s : シンボル検索
VSCodeのCtrl+Pのような、超高速ファイル検索が可能です。
2. Neo-tree(ファイルツリー)
<Space> + e : ファイルツリーの開閉
VSCodeのサイドバーのような、視覚的なファイル操作が可能です。
3. nvim-treesitter(シンタックスハイライト)
Tree-sitterを使った、高精度なシンタックスハイライト。 従来の正規表現ベースのハイライトより、はるかに正確です。
4. nvim-lspconfig(LSP設定)
自動補完、定義ジャンプ、リファクタリングなど、IDEのような機能を提供。
対応言語(一部):
- TypeScript/JavaScript
- Python
- Go
- Rust
- Lua
- Ruby
- など多数
5. which-key(キーバインド表示)
<Space>を押すと、利用可能なコマンドが表示されます。
キーバインドを覚えなくても使えるのが素晴らしい!
6. nvim-cmp(補完エンジン)
LSPやスニペット、バッファからの候補を統合的に表示します。
7. flash.nvim(高速移動)
sを押すと、画面内の任意の位置に瞬時にジャンプできます。
8. bufferline.nvim(タブライン)
開いているバッファをタブのように表示します。
移行して良かった点
1. 起動速度が速い
Vim: 約100ms
Neovim (LazyVim): 約50-80ms
lazy.nvimの遅延読み込みのおかげで、多くのプラグインを入れても起動が速いです。
2. LSPが完璧に動く
VSCodeのような補完、エラー表示、リファクタリングが、ターミナル内で実現できます。
3. 設定がシンプル
Luaで設定を書けるため、VimScriptより直感的で読みやすいです。
-- Lua(シンプル)
vim.opt.number = true
vim.opt.tabstop = 2
-- VimScript(複雑)
set number
set tabstop=2
4. コミュニティが活発
Neovimのプラグインエコシステムは非常に活発で、毎日新しいプラグインが生まれています。
5. VSCodeから完全に離れられる
以前はVSCodeとVimを併用していましたが、Neovimだけで完結するようになりました。
困ったこと・注意点
1. 学習コスト
LazyVimは設定済みですが、カスタマイズするにはLuaの基本的な知識が必要です。
おすすめリソース:
2. キーバインドの違い
Vimの慣れたキーバインドと違う部分があります。ただし、カスタマイズ可能です。
3. ターミナル環境の重要性
真価を発揮するには、良いターミナルエミュレータ(iTerm2、Alacritty、WezTermなど)が必要です。
4. プラグインの依存関係
一部のプラグインは外部ツールに依存します:
# よく必要になる外部ツール
brew install ripgrep # Telescopeの高速検索
brew install fd # ファイル検索
brew install lazygit # Git統合
実際の開発フロー
LazyVimを使った、1日の開発フローの例:
1. ターミナルを開く
$ nvim
2. プロジェクトを開く
<Space> + f + f → ファイル名を入力
3. ファイルツリーで全体を把握
<Space> + e
4. 関数の定義を確認
g + d(定義へジャンプ)
5. 関数をリネーム
<Space> + c + r
6. Grep検索で使用箇所を確認
<Space> + f + g
7. Gitの変更を確認・コミット
<Space> + g + g(LazyGit起動)
8. テストを実行
:! npm test
9. ファイルを保存して終了
:wq
すべてがキーボードだけで、高速に処理できます。
今後の展望
追加予定のプラグイン
- GitHub Copilot統合: AIペアプログラミング
- REST Client: API開発用のHTTPクライアント
- Markdown Preview: ブログ記事執筆の効率化
- Database UI: データベース管理
さらなるカスタマイズ
- キーマップの最適化
- 言語ごとの設定(TypeScript、Python、Goなど)
- スニペットの充実
- ワークスペース機能の活用
dotfilesで管理
Neovimの設定をGitで管理し、どの環境でも同じ設定を使えるようにする予定です。
# dotfilesリポジトリの構成例
~/dotfiles/
├── nvim/
│ └── .config/nvim/ → ~/.config/nvim にシンボリックリンク
├── zsh/
└── ...
まとめ
VimからNeovimへの移行は、想像以上にスムーズでした。特にLazyVimのおかげで、面倒な設定なしにモダンな開発環境が手に入りました。
移行をおすすめする人
- Vimユーザー: 慣れた操作感を保ちつつ、モダンな機能が欲しい
- VSCodeユーザー: ターミナルで完結する環境に興味がある
- 効率重視: キーボードだけで開発したい
- カスタマイズ好き: 自分だけのエディタを作りたい
移行のハードル
- 学習コスト: 中程度(Vimの知識があればスムーズ)
- 時間: 1日あれば基本的な開発環境が整う
- リスク: 低い(いつでもVSCodeに戻れる)
この記事のポイント
- Neovimの優位性: LSP、Lua、パフォーマンス
- LazyVimの便利さ: すぐに使える、拡張性が高い
- 実践的な設定: インストールからカスタマイズまで
- 実際の使用感: 1日使ってみての感想
もしVimを使っていて、「もっとモダンな機能が欲しい」と感じているなら、Neovim + LazyVimを試してみることを強くおすすめします!
参考リンク
- LazyVim公式サイト
- lazy.nvim GitHub
- Neovimことはじめ - Lazy.nvimを使った環境構築
- Neovim と Lazy.nvim で快適な設定環境を作る
- LazyVimを使ってNeovimを便利にする
次回は、具体的なプラグイン設定やカスタマイズについて、より詳しく書く予定です。お楽しみに!