Viを模倣する

Viper-mode

”M-X Viper-mode”を実行するとViのように挿入、ノーマルモードで活動ができるようになります。
でも、完全なViのキーバインドは使えません。
触った時は、以外とイイかもしれないとか思って楽しんでいたのですが、早々と限界を感じました。
ググりながら、途中まで設定をしたので記念に貼り付けておきます。

~/.viper

(setq viper-inhibit-startup-message 't)
(setq viper-expert-level '3)

;; backspace
(define-key viper-insert-global-user-map [backspace] 'backward-delete-char)
;; delete
(define-key viper-insert-global-user-map [delete] 'delete-char)

;; 行の初め/終わ
(define-key viper-vi-global-user-map(kbd"0") 'move-beginning-of-line)
(define-key viper-vi-global-user-map(kbd"$") 'move-end-of-line)

;; window操作
(define-key viper-vi-global-user-map(kbd"\C-w\C-w") 'other-window)
(define-key viper-emacs-global-user-map "\C-w\C-w" 'other-window)
(define-key viper-vi-global-user-map "\C-w\C-w" 'other-window)
(define-key viper-emacs-global-user-map "\C-w\C-o" 'delete-other-windows)
(define-key viper-vi-global-user-map "\C-w\C-o" 'delete-other-windows)
(define-key viper-vi-global-user-map "\C-w\h" 'windmove-left)
(define-key viper-vi-global-user-map "\C-w\j" 'windmove-down)
(define-key viper-vi-global-user-map "\C-w\k" 'windmove-up)
(define-key viper-vi-global-user-map "\C-w\l" 'windmove-right)
(define-key viper-emacs-global-user-map "\C-w\h" 'windmove-left)
(define-key viper-emacs-global-user-map "\C-w\j" 'windmove-down)
(define-key viper-emacs-global-user-map "\C-w\k" 'windmove-up)
(define-key viper-emacs-global-user-map "\C-w\l" 'windmove-right)

;; dired を少しだけ vi 風に
(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)))

Comment

  • 限界を感じた箇所はキーバインドで、Vimに似てるんだけどまだまだ足りない。
  • elispをもうちょい学習しとけば、それなりにキーバインド等が弄れて楽しいかもしれない。
  • 慣れていないせいで、elispで必要な物と意味を調べるのにやたらと手間がかかる。
    Vimだと適当に:h XXXXとかで探せるのになぁ)