Neovim プラグインとキーバインディング
lua/plugins/ に10個ほどのプラグインを追加しましたが、大半は手軽にインストールしたもので、実際に使用習慣を変えたのは3〜4個だけです。ここではそれらについて詳しく説明し、他は簡単に触れるにとどめます。
im-select は、中国語ユーザーによくある悩みを解決します。挿入モードからノーマルモードに戻った際、IME(入力メソッド)が中国語のままになっているため、j/k を押すと文字入力のつもりでコマンドが入力されてしまいます。im-select はモードの切り替え時に IME を自動的に切り替え、ノーマルモードではコマンドキーが常に英語入力のままになります。導入前は手動で IME を切り替える必要がありましたが、導入後はその意識すら不要になりました。
cutlass は「削除」と「切り取り」を分離します。デフォルトでは d/c/x がレジスタを上書きするため、「明明 yank したテキストを削除して貼り付けると、削除したばかりのテキストが貼り付けられてしまう」という現象がよく発生します。cutlass は削除操作でレジスタを更新しないようにし、貼り付けは常に最後に真正に yank した内容になります。履歴管理は yanky と組み合わせて行います。これは Vim のデフォルト動作の中で、私が唯一変更したいと考えていた部分です。
roslyn.nvim は、.NET 向けに Roslyn LSP(Mason 経由でインストールされる LanguageServer)を提供します。大規模な C# のソリューションでは、補完やジャンプの安定性が omnisharp よりも明らかに優れています。C# を書く場合は、これを専門的に切り替える価値があります。
claudecode.nvim は、選択範囲やバッファ全体を Claude に渡して修正させ、エディタ内で AI による処理を完結させます。ウィンドウを行き来する必要がありません。
また、LazyVim に標準搭載されているものの、日常的に使用しており、特筆に値するプラグインが2つあります。
flash は、「画面上の某所にジャンプする」操作を、行番号を数えることからタイピングに変更します。s を押した後、ターゲット単語の最初の1〜2文字を入力すると、一致する箇所にジャンプラベルが浮かび上がり、そのラベルの文字を押すだけで直接ジャンプできます。S は Treesitter 版で、構文構造に従って式や関数全体を選択します。長いファイルでは、/検索 + n や hjkl による繰り返し移動をほぼ置き換えています。
gitsigns は、行番号横の増減カラーバー以上の機能を持ちます。]h/[h で hunk 間を移動し、<leader>ghs/ghr でブロックごとにステージング/リVERT、<leader>ghp で行内プレビューにより変更内容を確認できます。lazygit を開かなくても、エディタ内で「このファイルのどの変更を今回のコミットに含めるか」を正確に選別できます。delta + lazygit と組み合わせることで、Git のビューが2つの階層に分かれます。
残りのプラグインは用途別に説明します。
- flutter-tools は Flutter 開発をエディタ内に統合します。
:FlutterRunでデバイスを起動し、保存時にホットリロードをトリガーし、:FlutterDevicesでシミュレータを切り替えます。flutterCLI を別ターミナルで実行する必要がなく、ログと LSP がすべて nvim 内で完結します。 - noice はコマンドライン、メッセージ、通知の UI を再設計しました。
:コマンドは画面最下部に押し込められるのではなく中央に浮き上がり、検索、cmdline補完、LSP の進行状況などが統一された浮き窗(ポップアップ)で表示されます。nui/notify と組み合わせることで、視覚的に非常にすっきりします。 - snacks は folke による「大杂烩」ツールセット(LazyVim に標準搭載)です。私は主に画像プレビュー(ターミナル内で直接 png をレンダリング)と、いくつかのコンポーネント(dashboard、notifier、bigfile。bigfile は超大規模ファイルを開く際にリソース消費の大きい機能を自動的に無効化してカクつきを防ぎます)を使用しています。
- smear-cursor は、カーソル移動に拖尾残影(トレイル効果)を追加する、純粋なビジュアル効果です。機能には影響しませんが、前述のジャンプ機能と組み合わせて使用すると、非常にスムーズに見えます。
- vim-wakatime は、バックグラウンドでプロジェクトや言語ごとのコーディング時間を統計し、データを WakaTime に送信します。月末には、自分の時間が実際にどこに使われているかを確認できます。
キーバインディングについては、LazyVim のデフォルトをほとんど変更していません。leader キーはスペースで、1回押すだけで which-key がヒントを表示します。唯一、筋肉記憶として変更したのは Ctrl+hjkl です。これにより、nvim でのウィンドウ切り替えと、境界を越えて Zellij への移動が同じキーで行え、エディタとマルチプレクサで統一されたキー操作が可能です。それ以外の gd/gr/K/<leader>ca などの LSP デフォルトキーはそのまま使用しています。