yo hubiera añadido una comenta, pero no puedo formatear la solución.
La solución de feedkeys es genial, con el pequeño enganche que SIEMPRE vuelve al modo normal, independientemente de en qué otro modo esté. No quiero cancelar el modo de línea de comando (para arrastrar & soltar archivos en Windows) y no necesito cancelar el modo visual, solo quería cancelar el modo de inserción.
La solución, entonces, aparece como:
autocmd FocusLost * call PopOutOfInsertMode()
function! PopOutOfInsertMode()
if v:insertmode
feedkeys("\<C-\>\<C-n>")
endif
endfunction
En otras palabras, sólo se salga si usted está en un modo de inserción. Esto podría refinarse aún más, ya que v: insertmode será 'i' en "inserción normal", 'r' en el modo Reemplazar y 'v' en el modo de Reemplazo Virtual. Para mí, saltar independientemente es bueno, pero el usuario puede querer editar para adaptarse.
Si esto no funciona para usted en MacVim, sustituir el contenido de PopOutOfInsertMode
con:
if v:insertmode == 'i' | call feedkeys("\<C-\>\<C-n>") | endif
hay una pregunta duplicado y contestar en superusuario: http://superuser.com/questions/236534/change -to-normal-mode-when-macvim-goes-background – rubiii