viper-modeであててんのよ!(これはひどいキーバインドですね
適当にEmacsでViのエミュレートをするviper-modeをいじくりまわしていたら、ひどいキーバインドができあがりました!
viper-modeのいいところは、Viと同じノーマルモードを持てることです。ということで俺俺キーバインドをあててもいいじゃない!! ということで describe-keyでバインドを調べて適当にぶち込んだりぶち込んだり。
Emacs Vim Vimperatorの影響を多分にうけていると思います。僕以外が使うことを想定していないので、全くおすすめしませんが、あくまで一例として置いておきますね
t には anything.el , uにはundo-tree.el をあてています
;;viper-mode
(setq viper-mode t)
(setq viper-inhibit-startup-message 't)
(setq viper-expert-level '3)
(define-key global-map (kbd "\C-g") 'viper-intercept-ESC-key)
(require 'viper)
(define-key viper-insert-global-user-map "\C-c" 'viper-exit-insert-state)
(defun swap-screen()
"Swap two screen,leaving cursor at current window."
(interactive)
(let ((thiswin (selected-window))
(nextbuf (window-buffer (next-window))))
(set-window-buffer (next-window) (window-buffer))
(set-window-buffer thiswin nextbuf)))
(defun swap-screen-with-cursor()
"Swap two screen,with cursor in same buffer."
(interactive)
(let ((thiswin (selected-window))
(thisbuf (window-buffer)))
(other-window 1)
(set-window-buffer thiswin (window-buffer))
(set-window-buffer (selected-window) thisbuf)))
(defun my-viper-beginning-of-buffer ()
(interactive)
(beginning-of-buffer))
(define-key viper-vi-global-user-map [?g?g] 'my-viper-beginning-of-buffer)
(defun my-viper-star ()
(interactive)
(let ((wd (concat "\\<" (thing-at-point 'symbol) "\\>")))
(setq viper-s-string wd)
(setq viper-s-forward t)
(viper-search wd t 1)))
(define-key viper-vi-global-user-map [?*] 'my-viper-star)
(defun my-viper-jump-tag ()
(interactive)
(setq wd (thing-at-point 'symbol))
(find-tag wd))
(define-key viper-vi-global-user-map [?\C-\]] 'my-viper-jump-tag)
(defun my-viper-jump-tag-next ()
(interactive)
(setq wd (thing-at-point 'symbol))
(find-tag wd 0))
(define-key viper-vi-global-user-map [?\C-:] 'my-viper-jump-tag-next)
(defun my-viper-pop-tag ()
(interactive)
(pop-tag-mark))
(define-key viper-vi-global-user-map [?\C-t] 'my-viper-pop-tag)
(defun my-viper-pop-mark ()
(interactive)
(set-mark-command -1))
(define-key viper-vi-global-user-map [?\C-o] 'my-viper-pop-mark)
(define-key viper-vi-global-user-map [?u] 'undo)
(define-key viper-insert-global-user-map [delete] 'delete-char)
(define-key viper-vi-global-user-map "1" 'delete-other-windows)
(define-key viper-vi-global-user-map "2" 'split-window-vertically)
(define-key viper-vi-global-user-map "3" 'split-window-horizontally)
(define-key viper-vi-global-user-map "4" 'swap-screen)
(define-key viper-vi-global-user-map "5" 'swap-screen-with-cursor)
(define-key viper-dired-modifier-map "j" 'dired-next-line)
(define-key viper-dired-modifier-map "k" 'dired-previous-line)
(define-key viper-dired-modifier-map "/" 'dired-goto-file)
(define-key viper-dired-modifier-map "l" '(lambda () (interactive) (dired-next-line 10)))
(define-key viper-dired-modifier-map "h" '(lambda () (interactive) (dired-previous-line 10)))
(define-key viper-vi-global-user-map "k" 'previous-line)
(define-key viper-vi-global-user-map "h" 'backward-char)
(define-key viper-vi-global-user-map "j" 'next-line)
(define-key viper-vi-global-user-map "l" 'forward-char)
(define-key viper-vi-global-user-map "\C-y" 'yank)
(define-key viper-vi-global-user-map "v" 'set-mark-command)
(define-key viper-vi-global-user-map "\C-g" 'keyboard-quit)
(define-key viper-vi-global-user-map "\C-w" 'kill-region)
(define-key viper-vi-global-user-map "t" 'anything)
(define-key viper-vi-global-user-map "o" 'other-window)
(define-key viper-vi-global-user-map "\C-h" 'move-beginning-of-line)
(define-key viper-vi-global-user-map "\C-l" 'move-end-of-line)
(define-key viper-vi-global-user-map "b" 'buffer-menu)
(define-key viper-vi-global-user-map "u" 'undo-tree-visualize)