2012-01-31 20 views
5

Tôi đã thử những điều sau đây tôi .vimrc:Làm thế nào để tự động lưu trong Vim 7 khi lấy nét bị mất khỏi cửa sổ?

:au FocusLost * silent! wa 
autocmd BufLeave,FocusLost silent! wall 

Và cũng đã cố gắng:

How can I make Vim autosave files when it loses focus?

nhưng không thể lấy nó để làm việc, khi tôi làm một tổ hợp phím Ctrl + Z hoặc switch sang một tab khác trong Terminal (mac) nó vẫn không tự động lưu.

+0

Đã thêm plugin tôi tìm thấy, có vẻ sạch hơn cấu hình/hacks thủ công và thực hiện công việc – bakkal

+0

có thể trùng lặp [Làm cách nào để tạo tệp Vim autosave khi mất tiêu điểm?] (Http://stackoverflow.com/questions/4637575/how-can-i-make-vim-autosave-files-khi-nó-mất-tập trung) –

+0

: au BufHidden *: wa –

Trả lời

11

BufLeave được kích hoạt khi bạn chuyển đến bộ đệm khác. Không <C-z> cũng không chuyển sang một tab Terminal.app khác sẽ kích hoạt điều này vì bạn đang sử dụng CLI Vim mà không quan tâm gì đến GUI hoặc môi trường của trình mô phỏng thiết bị đầu cuối và… bạn không rời khỏi bộ đệm của mình.

Điều này cũng đúng cho FocusLost (nhiều hoặc ít hơn, tài liệu nói rằng đó là GUI chỉ nhưng có thể hoạt động ở một số thiết bị đầu cuối mà không cần biết cái nào).

Vì vậy, các cài đặt này có thể sẽ hoạt động trong MacVim nhưng chắc chắn không có trong CLI Vim.

Thực tế, vì Vim không biết các thẻ trình mô phỏng thiết bị đầu cuối của bạn hoặc về nó được đặt trong nền, tôi nghi ngờ bạn có thể đạt được mục tiêu của bạn trong CLI Vim.

Tôi tình cờ có autocmd FocusLost * :wa trong số ~/.vimrc nhưng tôi đã đặt nó trong một điều kiện if has("gui_running") có điều kiện và cũng inoremap <Esc> <Esc>:w<CR> để lưu trên ESC. Hy vọng nó giúp.

+3

'inoremap : w ' thật tuyệt vời. Cảm ơn @romainl – adarsh

+2

@adarsh, 'autocmd InsertLeave * nếu mở rộng ('%')! = '' | cập nhật | endif' là vô cùng tốt hơn. – romainl

+1

@romainl, điều đó thật tuyệt! Nó bỏ qua những thứ như 'x' hoặc 'dd' và cứ thế. Những gì bạn có thể sử dụng cho các loại lệnh? Trong thực tế đó có lẽ là nó. Vâng, không bao giờ có indenting quá. Đoán bạn phải tiết kiệm trên mọi lệnh, nhưng điều đó có vẻ như quá mức cần thiết? – Costa

1

Trên OS X và Vim CLI, tôi sử dụng plugin này http://www.vim.org/scripts/script.php?script_id=4521

AutoSave - tự động lưu các thay đổi vào đĩa mà không cần phải sử dụng :w (hoặc bất kỳ ràng buộc với nó) mỗi khi một bộ đệm đã được sửa đổi. Tự động lưu bị tắt theo mặc định, chạy :AutoSaveToggle để bật/tắt Tự động lưu. Nếu bạn muốn bật plugin luôn có thể được thực hiện với tùy chọn g:auto_save (đặt 'let g:auto_save = 1' trong số .vimrc).

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