2010-06-03 24 views
6

Tôi thích vim của tôi để có được chính nó vào chế độ lệnh càng thường xuyên càng tốt. Tôi nghĩ rằng mất tập trung sẽ là một sự kiện tốt để làm cho điều đó xảy ra. Tất cả mọi thứ tôi tìm thấy là để tiết kiệm tập trung bị mất.Vim: trở về chế độ lệnh khi tiêu điểm bị mất

Tôi muốn nó tự động trở lại chế độ cmd khi chuyển đổi tab trong macvim hoặc khi cmd + tabbing sang ứng dụng khác.

+0

có một câu hỏi trùng lặp và trả lời trên superuser: http://superuser.com/questions/236534/change -to-normal-mode-khi-macvim-go-background – rubiii

Trả lời

16

autocommand sau đây sẽ là lựa chọn "hiển nhiên".

au FocusLost,TabLeave * stopinsert 

Thật không may, nó dường như chỉ hoạt động bình thường cho TabLeave. Sự kiện FocusLost đang kích hoạt nhưng vì lý do nào đó lệnh stopinsert không thực sự có hiệu lực cho đến sau khi nhận được một sự kiện quan trọng khi Vim đã lấy lại được tiêu điểm.

Thay vào đó, bạn có thể tận dụng lợi thế của feedkeys và chế độ "Đưa tôi đến chế độ bình thường bất kể điều gì!" key combo:

au FocusLost,TabLeave * call feedkeys("\<C-\>\<C-n>") 

Nhược điểm duy nhất là feedkeys() đòi hỏi ít nhất Vim 7. Đây không phải là một vấn đề lớn, tuy nhiên, kể từ khi Vim 7 được phát hành trở lại trong năm 2006.

+0

Hoàn hảo, cảm ơn! – devth

+0

Cool- không bao giờ biết về 'Ctrl - \ _ Ctrl-N'. Tôi đã có dòng stopinsert trong vimrc của tôi nhưng luôn luôn được bugged bởi thực tế là nó đã mất một nhân vật hơn khi trở về bộ đệm ...: wq –

+0

Tôi đã có nhận xét, nhưng nhận xét của tôi đi kèm với định dạng. Xem bên dưới. :) Tôi phải cảm ơn @jamessan để được hướng dẫn về điều này. –

7

tôi sẽ có thêm một bình luận, nhưng tôi không thể định dạng giải pháp.

Giải pháp dành cho nguồn cấp dữ liệu tuyệt vời, với sự cố nhỏ mà nó luôn quay trở lại chế độ bình thường, bất kể bạn đang ở chế độ nào khác. Tôi không muốn hủy chế độ dòng lệnh (để kéo các tệp thả & xuống Windows) và tôi không cần phải hủy chế độ trực quan, tôi chỉ muốn hủy chế độ chèn.

Các giải pháp, sau đó, xuất hiện như:

autocmd FocusLost * call PopOutOfInsertMode() 

function! PopOutOfInsertMode() 
    if v:insertmode 
     feedkeys("\<C-\>\<C-n>") 
    endif 
endfunction 

Nói cách khác, chỉ bật ra nếu bạn đang ở trong một chế độ chèn. Điều này có thể được tinh chỉnh hơn nữa, vì v: insertmode sẽ là 'i' trong 'chèn bình thường', 'r' trong chế độ Thay thế, và 'v' trong chế độ Thay thế Ảo. Đối với tôi, popping ra bất kể là tốt, nhưng người dùng có thể muốn chỉnh sửa cho phù hợp.

Nếu đây không phải đang làm việc cho bạn trong MacVim, thay thế nội dung của PopOutOfInsertMode với:

if v:insertmode == 'i' | call feedkeys("\<C-\>\<C-n>") | endif 
+0

Cảm ơn thông tin bổ sung! Tôi phát hiện ra cùng một vấn đề với giải pháp ban đầu. Tabbing đi trong khi ở chế độ lệnh để tìm một cái gì đó lên sau đó trở lại và tìm thấy nó xóa là bực bội. – devth

+1

Thật không may điều này không hoạt động trong MacVim. Tôi đã không xem xét lý do tại sao, mặc dù nó nằm trong danh sách những việc cần làm. :) –

+0

Bạn đã bao giờ tìm ra điều này chưa? Im có cùng một vấn đề! – ELLIOTTCABLE

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