Vim/Neovimを「ただのエディタ」で終わらせるな:Luaで拡張する自動化の深淵
多くのエンジニアがVimを「設定ファイルをいじって終わり」のツールだと誤解している。だが、Vim/Neovimの真価は、「思考の速度でエディタを書き換えられる拡張性」にある。
今日は、既存プラグインのインストール手順をなぞるだけの退屈な話はしない。Neovimの心臓部であるLuaを叩き、自分だけの「テンプレート挿入プラグイン」を実装する。これにより、定型文作成の数秒を削るだけでなく、チームのコーディング規約を強制力を持ってコードベースに埋め込む術を伝授する。
—
1. なぜ「自作プラグイン」なのか:生産性のパラダイムシフト
既存のプラグインは便利だが、痒いところに手が届かないことも多い。自分で関数を定義し、コマンドとして登録するスキルがあれば、「今のプロジェクトに特化した、自分だけの武器」を30分で錬成できる。
まずは、ディレクトリ構成を理解しよう。Neovimは `runtimepath` にある `lua/` ディレクトリ配下のモジュールを自動的に読み込む。
~/.config/nvim/
├── init.lua # メイン設定ファイル
└── lua/
└── my-plugin/
└── init.lua # 自作プラグインの本体
—
2. 実践:Luaで書く「テンプレート挿入プラグイン」
まずは、ユーザーがコマンドを打った際に、現在時刻やプロジェクト名を含むテンプレートを挿入するプラグインを実装する。
`lua/my-plugin/init.lua` を作成し、以下を記述してほしい。
local M = {}
— テンプレート挿入関数
— line: カーソル行に挿入、col: カーソル位置
function M.insert_template(name)
local lines = {
“—“,
“Author: ” .. os.getenv(“USER”), — OSのユーザー名を取得
“Date: ” .. os.date(“%Y-%m-%d”), — 現在の日付
“Project: ” .. name,
“—“,
“”
}
— 現在のバッファのカーソル位置にテキストを挿入
vim.api.nvim_put(lines, “l”, true, true)
end
— ユーザーコマンドとして登録する関数
function M.setup()
vim.api.nvim_create_user_command(“InsertTemplate”, function(opts)
— 引数があればそれを使用、なければ”Default”
local name = opts.args ~= “” and opts.args or “UnknownProject”
M.insert_template(name)
end, { nargs = ‘?’ }) — 引数を一つ取れるように設定
end
return M
次に、`init.lua` からこれを読み込む。
— init.lua
require(“my-plugin”).setup()
これで、Neovimを再起動すれば `:InsertTemplate MyAwesomeApp` と打つだけで、ヘッダーが一瞬で生成される。これこそが、Vimが「思考の延長」たる所以だ。
—
3. 開発スピードを極限まで高める「絶対設定」
プラグインを作るだけでなく、エディタ自体の反応速度を上げる設定が不可欠だ。
隠れたキーボードショートカット
`H, J, K, L` での移動に頼り切っているなら、それはまだ初心者だ。以下の設定を `init.lua` に加え、視線の移動を最小限にせよ。
— 行の折り返しを考慮した移動(物理行ではなく表示行で移動)
vim.keymap.set(‘n’, ‘j’, ‘gj’)
vim.keymap.set(‘n’, ‘k’, ‘gk’)
— 大文字/小文字を区別しない検索をデフォルトに、かつハイライトを自動クリア
vim.o.ignorecase = true
vim.o.smartcase = true
vim.keymap.set(‘n’, ‘
チーム開発で役立つ「設定共有ルール」
チーム開発で最も避けたいのは「個人の環境設定がコードに干渉する」ことだ。`.editorconfig` を必ずリポジトリのルートに配置せよ。
.editorconfig
root = true
[]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true # 保存時に不要な空白を削除(diff汚染を防ぐ)
insert_final_newline = true
—
4. プロが選ぶ「神プラグイン」の選定基準
プラグインの入れすぎは起動速度を殺す。以下の3つだけで、現代の開発環境は完成する。
1. [lazy.nvim](https://github.com/folke/lazy.nvim):
- 遅延読み込み(Lazy Loading)の王。不要なプラグインを必要な時までロードしないため、起動時間が100msを切る。
2. [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim):
- ファジーファインダー。ファイル検索、grep、コマンド履歴の探索が驚速になる。これなしで大規模開発は不可能。
3. [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig):
- LSP(Language Server Protocol)の窓口。VSCodeと同等の静的解析、補完、リファクタリングをVim上で実現する。
—
最後に:アーキテクトからの助言
プラグインを自作し、設定を最適化するプロセスは、単なる効率化ではない。「自分の道具を、自分の手で最適化する」というエンジニアの誇りを取り戻す作業だ。
最初は小さなテンプレート挿入から始めろ。その小さな自動化の積み重ねが、半年後、一年後のあなたとチームに、数千時間のフリータイムをもたらすことになる。
さあ、今すぐ `init.lua` を開き、自分だけの世界を構築し始めよう。コードは、道具を愛する者の味方だ。