2012-03-02 10 views

Odpowiedz

5

umieścić go w $ MYVIMRC

function! NumberOfWindows() 
    let i = 1 
    while winbufnr(i) != -1 
    let i = i+1 
    endwhile 
    return i - 1 
endfunction 


function! DonotQuitLastWindow() 
    if NumberOfWindows() != 1 
    let v:errmsg = "" 
    silent! quit 
    if v:errmsg != "" 
     "echohl ErrorMsg | echomsg v:errmsg | echohl NONE 
     "echoerr v:errmsg 
     echohl ErrorMsg | echo v:errmsg | echohl NONE 
    endif 
    else 
    echohl Error | echo "Can't quit the last window..." | echohl None 
    endif 
endfunction 

if has("gui_running") 
    cnoreabbrev <expr> q getcmdtype() == ":" && getcmdline() == 'q' ? 'call DonotQuitLastWindow()' : 'q' 
    cnoreabbrev <expr> qa getcmdtype() == ":" && getcmdline() == 'qa' ? 'call DonotQuitLastWindow()' : 'qa' 
endif 
+1

fajny i wydaje się bezpieczny (wywołanie getcmdline()). Teraz: qa nadal będzie działać, ale nie q. – Benoit

+0

zaktualizowano dla 'qa' – histrio

+1

'DonotQuitLastWindow' zamknie tylko jedno okno ... dodaj do niego argument i ustaw go jako pętlę (' while NumberOfWindows()! = 1') jeśli została wywołana przez 'qa'. – Benoit

3

Jeśli zamiast tego użyjesz polecenia :close, polecenie to nie zamknie ostatniego okna.

+0

'' może być nieco krótszy. :) –

4

Dlaczego nie używacie

:bd 

aby zamknąć bufor (po zapisaniu najnowsze zmiany)?

Powiązane problemy