From 14e2bec1c64db6e89abd7be6d0807ce0f999a7dd Mon Sep 17 00:00:00 2001 From: Oscar Wallberg Date: Fri, 5 Sep 2025 22:37:54 +0200 Subject: [PATCH] feat(vim): open git status in current tab --- .vimrc | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/.vimrc b/.vimrc index d69885e..b1a1f13 100644 --- a/.vimrc +++ b/.vimrc @@ -103,7 +103,7 @@ nmap gd :Gdiffsplit nmap gc :G commit nmap ga :G commit --amend nmap gp :G push -nmap gg :tabnew \| leftabove vert G \| vert resize 50 \| set wfw +nmap gg :call ToggleGitStatus() nmap ]g (GitGutterNextHunk) nmap [g (GitGutterPrevHunk) map gs (GitGutterStageHunk) @@ -611,4 +611,36 @@ function! s:SetupGitGutter() set statusline=%!StatusLine() endfunction +function! OpenGitStatus() + let l:previous_win = win_getid() + echo l:previous_win + leftabove vertical G + vertical resize 50 + setlocal winfixwidth + call win_gotoid(l:previous_win) +endfunction + +function! GetGitStatusWin() + let l:current_tabpage = tabpagenr() + for l:winnr in range(1, winnr('$')) + let l:bufnr = winbufnr(l:winnr) + let l:buftype = getbufvar(l:bufnr, '&buftype') + let l:bufname = bufname(l:bufnr) + if l:buftype ==# 'nowrite' && l:bufname =~# '^fugitive://.*\.git//$' + return l:winnr + endif + endfor + return 0 +endfunction + +function! ToggleGitStatus() + let l:win = GetGitStatusWin() + if l:win + execute l:win . 'wincmd c' + return + endif + + call OpenGitStatus() +endfunction + autocmd VimEnter * call s:SetupGitGutter()