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)