diff --git a/core/defuns/defuns-evil.el b/core/defuns/defuns-evil.el
index e92e645fb..935f8a4c6 100644
--- a/core/defuns/defuns-evil.el
+++ b/core/defuns/defuns-evil.el
@@ -122,5 +122,46 @@
(setq evil-ex-commands (delq (assoc abbrev evil-ex-commands) evil-ex-commands)))
(setq evil-ex-commands (delq (assoc cmd evil-ex-commands) evil-ex-commands))))
+(defvar narf:map-maps '())
+
+;;;###autoload (autoload 'narf:map "defuns-evil" nil t)
+(evil-define-command narf:map (bang input &optional mode)
+ "Map ex commands to keybindings. INPUT should be in the format [KEY] [EX COMMAND]."
+ (interactive "")
+ (let* ((parts (s-split-up-to " " input 2 t))
+ (mode (or mode 'normal))
+ (key (kbd (car parts)))
+ (command (s-join " " (cdr parts)))
+ (map (cl-case mode
+ ('normal evil-normal-state-local-map)
+ ('insert evil-insert-state-local-map)
+ ('visual evil-visual-state-local-map)
+ ('motion evil-motion-state-local-map)
+ ('operator evil-operator-state-local-map)))
+ (fn `(lambda () (interactive) (evil-ex-eval ,command))))
+ (if bang
+ (evil-define-key mode nil key fn)
+ (define-key map key fn))))
+
+;;;###autoload (autoload 'narf:nmap "defuns-evil" nil t)
+(evil-define-command narf:nmap (bang input &optional mode)
+ (interactive "") (narf:map bang input 'normal))
+
+;;;###autoload (autoload 'narf:imap "defuns-evil" nil t)
+(evil-define-command narf:imap (bang input &optional mode)
+ (interactive "") (narf:map bang input 'insert))
+
+;;;###autoload (autoload 'narf:vmap "defuns-evil" nil t)
+(evil-define-command narf:vmap (bang input &optional mode)
+ (interactive "") (narf:map bang input 'visual))
+
+;;;###autoload (autoload 'narf:mmap "defuns-evil" nil t)
+(evil-define-command narf:mmap (bang input &optional mode)
+ (interactive "") (narf:map bang input 'motion))
+
+;;;###autoload (autoload 'narf:omap "defuns-evil" nil t)
+(evil-define-command narf:omap (bang input &optional mode)
+ (interactive "") (narf:map bang input 'operator))
+
(provide 'defuns-evil)
;;; defuns-evil.el ends here
diff --git a/private/my-commands.el b/private/my-commands.el
index a56fd04bc..438ca4b0e 100644
--- a/private/my-commands.el
+++ b/private/my-commands.el
@@ -5,6 +5,12 @@
(exmap "bcomp[ile]" 'narf:compile-el)
(exmap "echo" 'narf:echo)
(exmap "minor" 'helm-describe-modes) ; list minor modes
+;; Quick mapping keys to commands, allows :nmap \m !make
+(exmap "nmap" 'narf:nmap)
+(exmap "imap" 'narf:imap)
+(exmap "vmap" 'narf:vmap)
+(exmap "mmap" 'narf:mmap)
+(exmap "omap" 'narf:omap)
;; Editing
(exmap "@" 'narf/evil-macro-on-all-lines) ; run macro on each line