2012-01-31 15 views
5

he probado el siguiente en mi .vimrc:¿Cómo guardar automáticamente en Vim 7 cuando se pierde el foco de la ventana?

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

Y también intentó:

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

pero no puede conseguir que funcione, cuando hago un Ctrl + Z o conmutador a otra pestaña en Terminal (mac) aún no guarda automáticamente.

+0

Añadido un plugin que encontré, parece más limpio que manuales configs/hacks y hace el trabajo – bakkal

+0

posible duplicado de [¿Cómo puedo hacer que los archivos de guardado automático Vim cuando se pierde el foco?] (Http://stackoverflow.com/questions/4637575/how-can-i-make-vim-autosave-files-when-it-loses-focus) –

+0

: au BufHidden *: wa –

Respuesta

11

BufLeave se activa cuando va a otro búfer. Ni <C-z> ni cambiar a otra pestaña Terminal.app activará esto porque está utilizando CLI Vim, que no le importa en absoluto la GUI o entorno del emulador de terminal y ... no está saliendo de su búfer.

Lo mismo ocurre con FocusLost (más o menos, el documento dice que es solo GUI pero puede funcionar en algunos terminales sin indicar cuál).

Por lo tanto, estas configuraciones probablemente funcionarán en MacVim pero definitivamente no en CLI Vim.

En realidad, dado que Vim no tiene conocimiento de las pestañas de su emulador de terminal ni de que se pongan en segundo plano, dudo que pueda lograr su objetivo en CLI Vim.

Resulta que tengo en mi autocmd FocusLost * :wa~/.vimrc pero lo he puesto en un if has("gui_running") condicional y también inoremap <Esc> <Esc>:w<CR> para ahorrar en ESC. Espero eso ayude.

+3

'inoremap : w ' es increíble. Gracias @romainl – adarsh

+2

@adarsh, 'autocmd InsertLeave * if expand ('%')! = '' | actualización | endif' es infinitamente mejor. – romainl

+1

@romainl, ¡eso es genial! Se omiten cosas como 'x' o 'dd's, etc. ¿Qué podrías usar para esos tipos de comandos? De hecho, eso es probablemente. Bueno, no importa, también hay sangría. Supongo que tienes que guardar en cada comando, pero eso simplemente parece exagerado, ¿no? – Costa

1

En OS X y Vim CLI, utilizo este plugin http://www.vim.org/scripts/script.php?script_id=4521

guardado automático - guardar automáticamente los cambios en el disco sin tener que utilizar :w (o cualquier unión a ella) cada vez que un buffer se ha modificado. Autoguardar está deshabilitado de forma predeterminada, ejecute :AutoSaveToggle para habilitar/deshabilitar Autoguardar. Si desea que el complemento esté siempre habilitado, puede hacerlo con la opción g:auto_save (marque 'let g:auto_save = 1' en su .vimrc).

Cuestiones relacionadas