はじめに
コミットメッセージって考えるの面倒ですよね。
最近はCopilotChat.nvimのおかげでメッセージを生成できるようになり、随分と楽になりました。
が、毎回コマンド( :CopilotChatCommitStaged
)を実行して提案を採用( <C-y>
)するのすら面倒になってきたので、コミット時にこのプロセスを自動化することにしました。
こんな感じで git commit
時に自動でチャットを開いてメッセージを補完します。
実行環境
- NVIM: v0.9.5
- CopilotChat.nvim: v2.13.1
実装
実装にはCopilotChat.nvim の APIを活用しました。
git commit
の編集時にのみ自動補完を適用するため、 ftplugin/gitcommit.lua
にスクリプトを配置します。
.config/nvim/ftplugin/gitcommit.lua
local has_copilot = vim.fn.exists(":CopilotChat") == 2
if has_copilot then
vim.schedule(function()
local chat = require("CopilotChat")
chat.open()
chat.ask('Generate a concise and meaningful commit message title based on the changes made. Make sure the title has maximum 50 characters. Do not put quotes around the title. Focus solely on creating the title, not the full commit message body.', {
selection = function(source)
return require("CopilotChat.select").gitdiff(source, true)
end,
callback = function(response)
chat.close()
vim.api.nvim_buf_set_text(0, 0, 0, 0, 0, {response})
end,
})
end)
end
このスクリプトは git commit
を契機にコミットメッセージを生成するプロセスを開始します。
:CopilotChatCommitStaged
と同様に変更に基づいたメッセージを生成し、その結果を即座にバッファに挿入します。
今回用意したプロンプトではコミットメッセージのタイトルのみを生成するようにしました。
これによりコミットメッセージを手動で生成する手間を省き、よりスムーズにコミット作業が行えるようになりました。