" session_workarounds.vim - Session restoration workarounds " " Author: Silvio Rhatto " " Fix NERDTree width " " Useful after restoring sessions between screen size changes (such " as when you share sessions between different computers). function FixWindowWidths() " Make sure NERDTree is focused execute ":NERDTreeFocus" " Set a fixed width execute ":vertical resize 30" " Move to the left pane wincmd l endfunction " In case you want to invoke FixWindowWidths explicitly command! -bang FixWindowWidths :call FixWindowWidths() " Fix window widths on all tabs function FixAllWindowWidths() " Make sure to run this only once if exists("did_fixed_window_widths") return endif " Save the last active window let l:current_win = win_getid() tabdo :call FixWindowWidths() " Restore the active window call win_gotoid(l:current_win) " An additional, last move to the left pane wincmd l let did_fixed_window_widths=1 endfunction " Ensure the window has maximized height " " This helps restoring the window size after reopening sessions after " switching monitors (like from laptop screen to external HDMI monitor). " " We just want to quickly maximize the window and then restore it to " it's original size, to ensure all windows are refreshed. " " Maybe this is not a NERDTree workaround itself, but more like a " session workaround. " " https://superuser.com/questions/140419/how-to-start-gvim-maximized " https://vim.fandom.com/wiki/Maximize_or_set_initial_window_size " https://vi.stackexchange.com/questions/8926/is-it-possible-to-obtain-the-displayable-area-width-and-height-of-current-buffe "let lines_initial=&l:lines function FixWindowHeights() " Set the maximum available height set lines=999 " Set the lines depending on the LINES environment variable " or through tput. " " This is not always inherited by vim: " https://github.com/vim/vim/issues/12160 if $LINES != "" execute ':set lines=' . $LINES else let available_lines = system('tput lines') execute ':set lines=' . available_lines " Old, and not working approach that tries to reuse the initial height "else " execute ':set lines=' . lines_initial " set lines=999 " execute ':set lines=' . winheight(0) - 3 endif endfunction " Restore all window sizes function RestoreWindowSizes() call FixWindowHeights() call FixAllWindowWidths() endfunction " Fix all window sizes augroup workaround autocmd! " This tends to fire for every buffer autocmd workaround SessionLoadPost * call RestoreWindowSizes() " This seems to fire only once, but even when there's no session to be " restored. "autocmd workaround VimEnter * call FixAllWindowWidths() augroup END