Files
dotfiles/nvim/lua/plugins/git.lua
T
2026-07-19 20:39:54 +08:00

90 lines
3.6 KiB
Lua

-- =============================================================================
-- 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", "<leader>hs", gs.stage_hunk, { buffer = bufnr, desc = "暂存修改块" })
vim.keymap.set("n", "<leader>hr", gs.reset_hunk, { buffer = bufnr, desc = "撤销修改块" })
vim.keymap.set("n", "<leader>hp", gs.preview_hunk, { buffer = bufnr, desc = "预览修改块" })
-- 文件操作
vim.keymap.set("n", "<leader>hS", gs.stage_buffer, { buffer = bufnr, desc = "暂存文件" })
vim.keymap.set("n", "<leader>hR", gs.reset_buffer, { buffer = bufnr, desc = "撤销文件修改" })
-- Blame
vim.keymap.set("n", "<leader>hb", gs.blame_line, { buffer = bufnr, desc = "查看行 blame" })
vim.keymap.set("n", "<leader>hl", gs.toggle_current_line_blame, { buffer = bufnr, desc = "切换行 blame" })
-- 其他
vim.keymap.set("n", "<leader>hw", gs.setqflist, { buffer = bufnr, desc = "列出所有 hunk" })
vim.keymap.set("n", "<leader>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 = {
{ "<leader>go", "<cmd>DiffviewOpen<cr>", desc = "查看改动" },
{ "<leader>gq", "<cmd>DiffviewClose<cr>", desc = "关闭 diff" },
{ "<leader>gl", "<cmd>DiffviewFileHistory %<cr>", desc = "文件历史" },
},
opts = {
file_panel = {
listing_style = "tree",
tree_options = {
flatten_dirs = true,
folder_statuses = "only_folded",
},
},
keymaps = {
view = {
{ "n", "<leader>q", "<cmd>DiffviewClose<cr>", { desc = "关闭 diffview" } },
},
file_panel = {
{ "n", "<leader>q", "<cmd>DiffviewClose<cr>", { desc = "关闭 diffview" } },
},
},
},
},
-- lazygit: Git TUI
{
"kdheepak/lazygit.nvim",
cmd = { "LazyGit", "LazyGitCurrentFile" },
keys = {
{ "<leader>gg", ":LazyGit<CR>", desc = "LazyGit" },
},
dependencies = { "nvim-lua/plenary.nvim" },
},
}