" 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('%')")) if number_of_windows_to_this_buffer > 1 wincmd c else bdelete endif endfunction nnoremap Q :call CloseWindowOrKillBuffer()