From fee1efaadd407902ff3eec1a28b3e176d660cd37 Mon Sep 17 00:00:00 2001 From: omri Date: Sat, 8 Jul 2023 15:20:43 +0300 Subject: [PATCH] nvim: improve git integration (diffview, gitsigns) --- .config/nvim/lazy-lock.json | 2 ++ .config/nvim/lua/config/mappings.lua | 36 +++++++++++++++++++++++++++ .config/nvim/lua/plugins/diffview.lua | 14 +++++++++++ .config/nvim/lua/plugins/gitsigns.lua | 6 +++++ 4 files changed, 58 insertions(+) create mode 100644 .config/nvim/lua/plugins/diffview.lua create mode 100644 .config/nvim/lua/plugins/gitsigns.lua diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json index 36da51b..9fbacbd 100644 --- a/.config/nvim/lazy-lock.json +++ b/.config/nvim/lazy-lock.json @@ -11,9 +11,11 @@ "diffview.nvim": { "branch": "main", "commit": "86bf6182e2ea767c21711de8a3c396d9b635d970" }, "formatter.nvim": { "branch": "master", "commit": "fa4f2729cc2909db599169f22d8e55632d4c8d59" }, "friendly-snippets": { "branch": "main", "commit": "0dd6114bea08276d9111d58c5dce5e256bbc8921" }, + "gitsigns.nvim": { "branch": "main", "commit": "256569c2fe697a3003dbd49ff474e5935af9066c" }, "lazy.nvim": { "branch": "main", "commit": "e6bf3a0d9c4899dcf832270f79bb1cee8fbc506e" }, "lspkind.nvim": { "branch": "master", "commit": "57610d5ab560c073c465d6faf0c19f200cb67e6e" }, "lualine.nvim": { "branch": "master", "commit": "05d78e9fd0cdfb4545974a5aa14b1be95a86e9c9" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "d381fcb78d7a562c3244e1c8f76406954649db36" }, "mason.nvim": { "branch": "main", "commit": "7d7efc738e08fc5bee822857db45cb6103f0b0c1" }, "mbc-colorscheme.nvim": { "branch": "main", "commit": "6d74768526fc36d057c393b5aaa174c688b23a10" }, "mini.bracketed": { "branch": "main", "commit": "4d5d8d8cfadb82b4e2d9196da2ecd5cd938a9c48" }, diff --git a/.config/nvim/lua/config/mappings.lua b/.config/nvim/lua/config/mappings.lua index 5cb1caa..221236d 100644 --- a/.config/nvim/lua/config/mappings.lua +++ b/.config/nvim/lua/config/mappings.lua @@ -65,6 +65,42 @@ vim.keymap.set("n", "gn", function() vim.lsp.buf.rename() end, { desc = "Rename" }) +-- vcs +vim.keymap.set("n", "vs", function() + require("gitsigns").stage_hunk() +end, { desc = "Stage Hunk" }) +vim.keymap.set("n", "vr", function() + require("gitsigns").reset_hunk() +end, { desc = "Reset Hunk" }) +vim.keymap.set("v", "vs", function() + require("gitsigns").stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) +end, { desc = "Stage Hunk" }) +vim.keymap.set("v", "vr", function() + require("gitsigns").reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) +end, { desc = "Reset Hunk" }) +vim.keymap.set("n", "va", function() + require("gitsigns").stage_buffer() +end, { desc = "Stage Buffer" }) +vim.keymap.set("n", "vu", function() + require("gitsigns").undo_stage_hunk() +end, { desc = "Undo Stage Hunk" }) +vim.keymap.set("n", "vx", function() + require("gitsigns").reset_buffer() +end, { desc = "Reset Buffer" }) +vim.keymap.set("n", "vp", function() + require("gitsigns").preview_hunk() +end, { desc = "Preview Hunk" }) +vim.keymap.set("n", "vb", function() + require("gitsigns").blame_line({ full = true }) +end, { desc = "Blame Line" }) +vim.keymap.set("n", "vB", function() + require("gitsigns").toggle_current_line_blame() +end, { desc = "Toggle Blame" }) +vim.keymap.set("n", "vt", function() + require("gitsigns").toggle_deleted() +end, { desc = "Toggle Deleted" }) +vim.keymap.set("n", "vd", "DiffviewToggle", { desc = "Diff" }) + -- neotest vim.keymap.set("n", "na", function() require("neotest").run.attach() diff --git a/.config/nvim/lua/plugins/diffview.lua b/.config/nvim/lua/plugins/diffview.lua new file mode 100644 index 0000000..c8f2b34 --- /dev/null +++ b/.config/nvim/lua/plugins/diffview.lua @@ -0,0 +1,14 @@ +return { + "sindrets/diffview.nvim", + config = function() + vim.api.nvim_create_user_command("DiffviewToggle", function(e) + local view = require("diffview.lib").get_current_view() + + if view then + vim.cmd("DiffviewClose") + else + vim.cmd("DiffviewOpen " .. e.args) + end + end, { nargs = "*" }) + end, +} diff --git a/.config/nvim/lua/plugins/gitsigns.lua b/.config/nvim/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..df45ec6 --- /dev/null +++ b/.config/nvim/lua/plugins/gitsigns.lua @@ -0,0 +1,6 @@ +return { + "lewis6991/gitsigns.nvim", + config = function() + require("gitsigns").setup() + end, +}