VimからNeovimへ移行した理由とLazyVimの導入

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に戻れる)

この記事のポイント

  1. Neovimの優位性: LSP、Lua、パフォーマンス
  2. LazyVimの便利さ: すぐに使える、拡張性が高い
  3. 実践的な設定: インストールからカスタマイズまで
  4. 実際の使用感: 1日使ってみての感想

もしVimを使っていて、「もっとモダンな機能が欲しい」と感じているなら、Neovim + LazyVimを試してみることを強くおすすめします!


参考リンク

次回は、具体的なプラグイン設定やカスタマイズについて、より詳しく書く予定です。お楽しみに!