【入門編】LuaによるVimプラグイン開発の入り口:『コマンド入力によるテキストテンプレート挿入プラグイン』をゼロから作る – 軽量・高機能テキストエディタ生産性向上バイブル

あなたの指先を「思考の速さ」に同期させる:Luaで始めるNeovimプラグイン開発入門

こんにちは。日々、開発環境という名の「自分の城」を磨き上げている皆さん。

多くのエンジニアが「Vimの操作に慣れた」という段階で満足してしまいますが、真の効率化はそこから始まります。既存のプラグインを詰め込むだけの構成は、やがてメンテナンス地獄という名の負債を招きます。

本当に必要なのは、「自分の指の動きに合わせて、エディタが呼吸するように反応してくれる状態」です。今回は、その第一歩として、Luaを使って「自分だけのテキストテンプレート挿入ツール」をゼロから作る方法を解説します。

—

なぜ、Luaでプラグインを書くのか?

かつてのVimスクリプト(VimL)は独自仕様の塊でしたが、現在のNeovimはLuaをファーストクラス(第一級市民)として採用しています。

Luaは極めて軽量で、かつC言語との親和性が高いため、動作が爆速です。また、多くのモダンなプラグインがLuaで書かれているため、ソースコードを読むことがそのまま「最高峰の設計」を学ぶ教材になります。自分で書けるようになれば、ネット上のコードをコピペするだけの「設定迷子」から脱却できるのです。

—

ステップ1:Neovimのプラグイン構造を理解する

Neovimのプラグインは、実は非常にシンプルなディレクトリ構造で動いています。まずは、ユーザー設定ディレクトリ(通常 `~/.config/nvim/`)の中に、自分のプラグインを配置する場所を作りましょう。

自分のプラグイン用ディレクトリを作成
mkdir -p ~/.config/nvim/lua/my_plugin

この `lua/` ディレクトリ配下にあるファイルは、Neovim起動時に `require` で読み込めるようになります。これがLuaプラグインの基本です。

—

ステップ2:テンプレート挿入のコアロジックを書く

まずは、指定した文字列を現在のカーソル位置に挿入する関数を書きます。`~/.config/nvim/lua/my_plugin/init.lua` というファイルを作成してください。

— ~/.config/nvim/lua/my_plugin/init.lua

local M = {}

— テンプレートを挿入する関数
— @param text: 挿入したい文字列
function M.insert_template(text)
— 現在の行番号と列番号を取得
local cursor = vim.api.nvim_win_get_cursor(0)
local row = cursor[1]

— テキストを分割してリストにする(改行対応)
local lines = vim.split(text, “\n”)

— 現在の行の直後に挿入
vim.api.nvim_buf_set_lines(0, row, row, false, lines)

print(“テンプレートを挿入しました!”)
end

return M

なぜ `vim.api` を使うのか?

`vim.api` は、Neovimの内部データに直接触れるための「公的な窓口」です。これを使うことで、エディタのバージョンアップに強く、かつ他のプラグインと競合しない安全な操作が可能になります。ここを理解するのが、エンジニアとしての一歩です。

—

ステップ3:コマンドとして登録する

関数を作っただけでは、手動で呼び出すのは面倒です。Vimのコマンドモードから `:MyTemplate` と打つだけで動くようにしましょう。`~/.config/nvim/init.lua` に以下を追記します。

— ~/.config/nvim/init.lua

— プラグインを読み込む
local my_plugin = require(“my_plugin”)

— コマンドを定義
— :MyTemplate で動作するように設定
vim.api.nvim_create_user_command(“MyTemplate”, function()
— 挿入したいテンプレート内容
local template = [[
/

  • TODO:
  • Date: ]] .. os.date(“%Y-%m-%d”) .. [[

/
]]
my_plugin.insert_template(template)
end, {})

—

ステップ4:検証と実践

設定を保存して、Neovimを再起動(または `source $MYVIMRC`)してください。適当なファイルを開いて、コマンドモードで以下を打ち込みます。

`:MyTemplate`

どうでしょうか?現在のカーソル位置に、日付付きのテンプレートが挿入されたはずです。

ここからが本当の始まり

このコードは非常にシンプルですが、以下の拡張を行うことで、あなた専用の最強ツールへと進化します。

1. 引数の取得: `:MyTemplate header` のように、入力によって挿入するテキストを切り替える。
2. 選択範囲の利用: `vim.api.nvim_buf_get_selection` を使って、選択したコードをラップする機能を追加する。
3. Lua LSPの導入: `lua-language-server` を設定すれば、コード補完が効くようになり、開発効率が劇的に上がります。

—

最後に:なぜツールを「自作」するのか

既存のプラグインを探してインストールする時間は、確かに短縮できます。しかし、自分のワークフローに100%適合するツールは、どこにも売っていません。

自分でLuaを書くということは、「エディタを自分の脳の拡張パーツにする」という行為です。一度この感覚を覚えると、プログラミングそのものが、より直感的で楽しい体験に変わります。

まずはこの小さなテンプレート挿入から始めてみてください。それが、あなたの開発人生をより快適にする、最初の一歩になるはずです。何か詰まったら、いつでも聞いてくださいね。応援しています!

タイトルとURLをコピーしました