local function open_git_status() local previous_win = vim.api.nvim_get_current_win() vim.cmd("leftabove vertical G") vim.api.nvim_win_set_width(0, 50) vim.api.nvim_set_option_value("winfixwidth", true, { scope = "local" }) vim.api.nvim_set_current_win(previous_win) end local function get_git_status_win() local current_tabpage = vim.api.nvim_get_current_tabpage() for _, win in ipairs(vim.api.nvim_tabpage_list_wins(current_tabpage)) do local buf = vim.api.nvim_win_get_buf(win) local buftype = vim.api.nvim_get_option_value("buftype", { buf = buf }) if buftype == "nowrite" and vim.api.nvim_buf_get_name(buf):match("^fugitive://.*%.git//$") then return win end end end local function toggle_git_status() local win = get_git_status_win() if win then vim.api.nvim_win_close(win, false) return end open_git_status() end vim.keymap.set("n", "gd", vim.cmd.Gvdiffsplit) vim.keymap.set("n", "gD", function() vim.cmd.Gvdiffsplit("HEAD") end) vim.keymap.set("n", "gh", vim.cmd.Ghdiffsplit) vim.keymap.set("n", "gH", function() vim.cmd.Ghdiffsplit("HEAD") end) vim.keymap.set("n", "gc", function() vim.cmd.G("commit") end) vim.keymap.set("n", "ga", function() vim.cmd.G("commit --amend") end) vim.keymap.set("n", "gp", function() vim.cmd.G("push") end) vim.keymap.set("n", "gg", toggle_git_status) vim.api.nvim_create_autocmd("BufWritePost", { callback = function() vim.fn["fugitive#ReloadStatus"]() end, })