From Smelly Macaque, 1 Week ago, written in Plain Text.
  1.  
  2.     "#[*]---------
  3.     "# Exit Insert mode when idle for to long
  4.     au InsertLeave * :normal `^–
  5.  
  6.     fu! AuExitInsert(n)
  7.       setlocal timeoutlen=0
  8.       setlocal ttimeoutlen=0
  9.       "let b:_idle = a:n
  10.       let b:_idle = 15
  11.       fu! AuLoop()
  12.         echo "idle... " b:_idle
  13.         let b:_idle = b:_idle - 1
  14.         sleep
  15.         return
  16.       endfu
  17.  
  18.       while b:_idle > 0
  19.         if getchar(1) != ''
  20.           echo ''
  21.           return
  22.         else
  23.           call AuLoop()
  24.         endif
  25.       endwhile
  26.       if b:_idle == 0
  27.           stopinsert
  28.       endif
  29.  
  30.       unlet b:_idle
  31.       delfu AuLoop
  32.       echo ''
  33.     endfu
  34.  
  35.     "set updatetime=100000
  36.     let &updatetime=20000
  37.     au CursorHoldI * :call AuExitInsert(&updatetime)
captcha