-- ============================================================================= -- git.lua — Git 集成 -- ============================================================================= return { -- gitsigns: 行内 diff 标记 { "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, }, -- diffview: Git diff 视图 { "sindrets/diffview.nvim", cmd = "DiffviewOpen", keys = { { "go", "DiffviewOpen", desc = "查看改动" }, { "gq", "DiffviewClose", desc = "关闭 diff" }, { "gl", "DiffviewFileHistory %", desc = "文件历史" }, }, opts = { file_panel = { listing_style = "tree", tree_options = { flatten_dirs = true, folder_statuses = "only_folded", }, }, keymaps = { view = { { "n", "q", "DiffviewClose", { desc = "关闭 diffview" } }, }, file_panel = { { "n", "q", "DiffviewClose", { desc = "关闭 diffview" } }, }, }, }, }, -- lazygit: Git TUI { "kdheepak/lazygit.nvim", cmd = { "LazyGit", "LazyGitCurrentFile" }, keys = { { "gg", ":LazyGit", desc = "LazyGit" }, }, dependencies = { "nvim-lua/plenary.nvim" }, }, }