local func = require("kyoh86.lib.func") ---@type LazySpec[] local spec = { { "lewis6991/gitsigns.nvim", dependencies = { "plenary.nvim", "sakura", "momiji" }, config = function() require("kyoh86.lib.scheme").onSchemeChanged(function(colors_name) local palette = vim.g[colors_name .. "_colors"] vim.api.nvim_set_hl(0, "GitSignsAddNr", { fg = palette.gradation1, bg = palette.brightgreen }) vim.api.nvim_set_hl(0, "GitSignsChangeNr", { fg = palette.gradation1, bg = palette.brightcyan }) vim.api.nvim_set_hl(0, "GitSignsDeleteNr", { fg = palette.gradation1, bg = palette.brightred }) end, true) local gitsigns = require("gitsigns") gitsigns.setup({ signcolumn = true, numhl = false, sign_priority = 1, on_attach = function(bufnr) vim.keymap.set("n", "jgdn", function() if vim.wo.diff then return "jgdn" end vim.schedule(func.bind_all(gitsigns.nav_hunk, "next")) return "" end, { expr = true, buffer = bufnr, desc = "次のgit diffに移動する" }) vim.keymap.set("n", "jgdp", function() if vim.wo.diff then return "jgdp" end vim.schedule(func.bind_all(gitsigns.nav_hunk, "prev")) return "" end, { expr = true, buffer = bufnr, desc = "前のgit diffに移動する" }) vim.api.nvim_create_user_command("GitsignsStageSelection", function(ev) if ev.range == 0 then local line = vim.fn.line(".") require("gitsigns").stage_hunk({ line, line }) elseif ev.range == 1 then require("gitsigns").stage_hunk({ ev.line1, ev.line1 }) elseif ev.range == 2 then require("gitsigns").stage_hunk({ ev.line1, ev.line2 }) end end, { range = true, }) vim.keymap.set({ "n" }, "gah", "Gitsigns stage_hunk", { buffer = bufnr, noremap = true, desc = "カーソル位置のHunkをGitに載せる" }) vim.keymap.set({ "n" }, "gal", [[GitsignsStageSelection]], { buffer = bufnr, noremap = true, desc = "カーソル行の差分をGitに載せる" }) vim.keymap.set({ "x" }, "ga", [[:GitsignsStageSelection]], { buffer = bufnr, noremap = true, desc = "選択行の差分をGitに載せる" }) vim.keymap.set({ "n" }, "gr", "Gitsigns undo_stage_hunk", { buffer = bufnr, noremap = true, desc = "カーソル位置の差分をGitからリセットする" }) vim.keymap.set({ "x" }, "gr", ":Gitsigns undo_stage_hunk", { buffer = bufnr, noremap = true, desc = "洗濯業の差分をGitからリセットする" }) vim.keymap.set({ "n" }, "gR", "Gitsigns reset_buffer_index", { buffer = bufnr, noremap = true, desc = "このファイルの差分をUnstageする" }) vim.keymap.set("n", "gq", func.bind_all(gitsigns.setqflist, "all"), { buffer = bufnr, noremap = true, desc = "このファイルのGit diffをQuickfixに載せる" }) end, }) end, event = "BufReadPost", }, { "lambdalisue/vim-gin", dependencies = { "denops.vim" }, config = function() vim.keymap.set("n", "gdp", "(gin-diffput)", { desc = "Put a diff chunk to WORKTREE buffer" }) vim.keymap.set("n", "gdg", "(gin-diffget)", { desc = "Get a diff chunk from WORKTREE or HEAD buffer (prefer WORKTREE)" }) vim.keymap.set("n", "gd>", "(gin-diffget-l)", { desc = "Get a diff chunk from HEAD buffer" }) vim.keymap.set("n", "gd<", "(gin-diffget-r)", { desc = "Get a diff chunk from WORKTREE buffer" }) vim.keymap.set("n", "gs", "GinStatus", { desc = "Show Git status" }) local group = vim.api.nvim_create_augroup("kyoh86-plug-gin", { clear = true }) vim.api.nvim_create_autocmd("FileType", { pattern = { "gitcommit", "markdown" }, group = group, callback = function() vim.keymap.set("n", "a", function() if vim.b.gin_internal_proxy_waiter then return "Apply" end return "a" end, { expr = true, desc = "Apply a commit message and others" }) vim.keymap.set("n", "c", function() if vim.b.gin_internal_proxy_waiter then return "Cancel" end return "c" end, { expr = true, desc = "Apply a commit message and others" }) end, }) end, }, } return spec