2012-03-02 16 views

Trả lời

5

đặt nó trong bạn $ 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

đẹp, và có vẻ an toàn (gọi getcmdline()). Bây giờ,: qa sẽ vẫn thoát, nhưng không q. – Benoit

+0

được cập nhật cho 'qa' – histrio

+1

'DonotQuitLastWindow' sẽ chỉ đóng một cửa sổ… thêm một đối số vào nó và biến nó thành một vòng lặp (' trong khi NumberOfWindows()! = 1') nếu được kích hoạt bởi 'qa'. – Benoit

3

Nếu bạn sử dụng lệnh :close thay vào đó, lệnh đó sẽ không đóng cửa sổ cuối cùng.

+0

'' có thể là một chút ngắn hơn. :) –

4

Tại sao bạn không sử dụng

:bd 

để đóng bộ đệm (sau khi bạn đã lưu các thay đổi mới nhất)?

Các vấn đề liên quan