2011-09-19 16 views
6

Uso un complemento en vim para compilar archivos Tex. Cuando hay errores en la compilación, todos se muestran en una ventana de solución rápida en la parte inferior de la pantalla.Cómo cerrar automáticamente la ventana de solución rápida al salir de un archivo?

Cuando quiero dejar un archivo que estoy trabajando (:q, :wq, etc) la ventana quickfix puede ser molesto porque se mantiene abierta después de haber dejado el buffer del archivo que estaba trabajando, me obliga a :q en la ventana de solución rápida también.

¿Hay alguna manera de decirle a vim que ejecute inmediatamente :close cuando uso :q? He intentado varios autocmds, pero fue en vano.

+0

Would ': ccl' ser útil? –

+0

'': ccl'' es exactamente lo mismo que '': cclose'' ... – romeovs

+0

Pertenece al superusuario –

Respuesta

14

Añadir a su archivo .vimrc

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

Advertencia: esto se cerrará vim si la ventana quickfix es la única ventana visible (y única pestaña).

+0

esto es exactamente lo que necesitaba. gracias <3 – romeovs

+0

Hiciste mi día – ospider

3

El comando :qa cerrará todas las ventanas abiertas.

1

Para cerrar correctamente, incluso varias ventanas quickfix/lugar/ayuda automáticamente al salir de archivo (:q, :wq, etc.) añadir siguiente código a su .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 w.r.t. 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 

Esto no tiene problemas con la nueva pestaña abriendo desde la ventana de quickfix.

Cuestiones relacionadas