How to automatically close the quick fix window when exiting a file?

I am using a plugin in vim to compile Tex files. When there are compilation errors, they are all displayed in the quick fix window at the bottom of the screen.

When I want to leave the file I'm working on ( :q ,: wq, etc.), the quickfix window can be annoying because it remains open after I left the file buffer that I was working on, me to :q in the quick fix window.

Is there a way to tell vim to execute :close immediately when I use :q ? I tried several autocmds, but to no avail.

+9
source share
3 answers

Add .vimrc to your file

 aug QFClose au! au WinEnter * if winnr('$') == 1 && &buftype == "quickfix"|q|endif aug END 

Warning: this will close vim if the quick fix window is the only visible window (and only the tab).

+16
source

Command :qa will close all open windows.

+3
source

To correctly close even several windows of the quick and local / help windows when exiting the file ( :q :wq , etc.), add the following code to your .vimrc:

 " s:NextNormalWindow() {{{2 function! s:NextNormalWindow() abort for i in range(1, winnr('$')) let buf = winbufnr(i) " skip unlisted buffers if !buflisted(buf) continue endif " skip temporary buffers with buftype set if getbufvar(buf, '&buftype') != '' continue endif " skip the preview window if getwinvar(i, '&previewwindow') continue endif " skip current window if i == winnr() continue endif return i endfor return -1 endfunction " s:QuitIfOnlyWindow() {{{2 function! s:QuitIfOnlyWindow() abort let l:buftype = getbufvar(winbufnr(winnr()), "&buftype") if l:buftype != "quickfix" && l:buftype != "help" return endif " Check if there is more than one window if s:NextNormalWindow() == -1 " Check if there is more than one tab page if tabpagenr('$') == 1 " Before quitting Vim, delete the special buffer so that " the '0 mark is correctly set to the previous buffer. " Also disable autocmd on this command to avoid unnecessary " autocmd nesting. if winnr('$') == 1 if has('autocmd') noautocmd bdelete endif endif quit else " Note: workaround for the fact that in new tab the buftype is set " too late (and sticks during this WinEntry autocmd to the old - " potentially quickfix/help buftype - that would automatically " close the new tab and open the buffer in copen window instead " New tabpage has previous window set to 0 if tabpagewinnr(tabpagenr(), '#') != 0 let l:last_window = 0 if winnr('$') == 1 let l:last_window = 1 endif close if l:last_window == 1 " Note: workaround for the same bug, but wrt Airline " plugin (it needs to refresh buftype and status line after " last special window autocmd close on a tab page if exists(':AirlineRefresh') execute "AirlineRefresh" endif endif endif endif endif endfunction " autoclose last open location/quickfix/help windows on a tab if has('autocmd') aug AutoCloseAllQF au! autocmd WinEnter * nested call s:QuitIfOnlyWindow() aug END endif 

This has no problem opening a new tab from the quick uninstall window.

+1
source

Source: https://habr.com/ru/post/897636/


All Articles