-- ============================================================================ -- Git 集成 (gitsigns) -- 行内 diff 标记 + hunk 操作 -- ============================================================================ return { { "lewis6991/gitsigns.nvim", event = "BufReadPre", opts = { signs = { add = { text = "▍" }, change = { text = "▍" }, delete = { text = "▍" }, topdelete = { text = "▍" }, changedelete = { text = "▍" }, }, on_attach = function(bufnr) local gs = require("gitsigns") -- 导航 vim.keymap.set("n", "]h", function() gs.nav_hunk("next") end, { buffer = bufnr, desc = "下一个修改块" }) vim.keymap.set("n", "[h", function() gs.nav_hunk("prev") end, { buffer = bufnr, desc = "上一个修改块" }) -- Hunk 操作 vim.keymap.set("n", "hs", gs.stage_hunk, { buffer = bufnr, desc = "暂存修改块" }) vim.keymap.set("n", "hr", gs.reset_hunk, { buffer = bufnr, desc = "撤销修改块" }) vim.keymap.set("n", "hp", gs.preview_hunk, { buffer = bufnr, desc = "预览修改块" }) -- 文件操作 vim.keymap.set("n", "hS", gs.stage_buffer, { buffer = bufnr, desc = "暂存文件" }) vim.keymap.set("n", "hR", gs.reset_buffer, { buffer = bufnr, desc = "撤销文件修改" }) -- Blame vim.keymap.set("n", "hb", gs.blame_line, { buffer = bufnr, desc = "查看行 blame" }) vim.keymap.set("n", "hl", gs.toggle_current_line_blame, { buffer = bufnr, desc = "切换行 blame" }) -- 其他 vim.keymap.set("n", "hw", gs.setqflist, { buffer = bufnr, desc = "列出所有 hunk" }) vim.keymap.set("n", "hd", gs.toggle_word_diff, { buffer = bufnr, desc = "切换行内 diff" }) end, }, config = function(_, opts) require("gitsigns").setup(opts) -- 自定义颜色 vim.api.nvim_set_hl(0, "GitSignsAdd", { fg = "#4CAF50" }) vim.api.nvim_set_hl(0, "GitSignsChange", { fg = "#2196F3" }) vim.api.nvim_set_hl(0, "GitSignsDelete", { fg = "#F44336" }) end, }, }