" Use Q to intelligently close a window " (if there are multiple windows into the same buffer) " or kill the buffer entirely if it's the last window looking into that buffer function! CloseWindowOrKillBuffer() let number_of_windows_to_this_buffer = len(filter(range(1, winnr('$')), "winbufnr(v:val) == bufnr('%')")) " We should never bdelete a nerd tree if matchstr(expand("%"), 'NERD') == 'NERD' wincmd c return endif if number_of_windows_to_this_buffer > 1 wincmd c else bdelete endif endfunction nnoremap Q :call CloseWindowOrKillBuffer()