         (lookup-key evil-motion-state-map (evil-escape--first-key)))
   ;; evil states
   ;; insert state
-  (eval `(evil-escape-define-escape "insert-state" evil-insert-state-map evil-normal-state
-                                    :insert-func evil-escape--default-insert-func
-                                    :delete-func evil-escape--default-delete-func))
+  (let ((insert-func (lambda (key) (interactive)
+                       (cond ((eq 'term-mode major-mode)
+                              (call-interactively 'term-send-raw))
+                             (t (evil-escape--default-insert-func key))))))
+    (eval `(evil-escape-define-escape "insert-state" evil-insert-state-map evil-normal-state
+                                      :insert-func ,insert-func
+                                      :delete-func evil-escape--default-delete-func)))
   ;; emacs state
   (let ((exit-func (lambda () (interactive)
                      (cond ((string-match "magit" (symbol-name major-mode))

;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; Keywords: convenience editing evil
;; Created: 22 Oct 2014
;; Version: 2.03
;; Package-Requires: ((emacs "24") (evil "1.0.9"))
;; URL: https://github.com/syl20bnr/evil-escape


  "Send `q' key press event to exit from a buffer."
  (setq unread-command-events (listify-key-sequence "q")))

(defun evil-escape--term-insert-func (key)
  "Insert KEY in current term buffer."
  (term-send-raw))

(defun evil-escape--execute-shadowed-func (func)
  "Execute the passed FUNC if the context allows it."
  (unless (or (null func)
