header

2014年12月31日水曜日

vi.el、Emacsやめるってよ

Emacs newsの24をみてたら、vi.el, vpi.elがObsoleteになるみたい(なった?)ようです。以下のS式をEmacs上で評価するとみれます。

(view-emacs-news 24)

一応コメントを抜き出すと、

* Changes in Specialized Modes and Packages in Emacs 24.5
** Obsolete packages
...
*** vi.el, vip.el (try M-x viper instead)



ということで変わりにviper-modeを使えということらしいです。まぁ使ってる人がいるのか謎のvi modeですが、まだ(require 'vi)で注意はでますがまだ使うことはできました。

なんでこんなこと書いてるかというと、来年は心を入れかえて(Emacsで)vi(っぽい)操作を少しずつ覚えようと思い調べたからです。この記事のメインはEmacsよりのevilの設定なんですが、この Evil: EmacsをVimのごとく使う - 導入編 をみるといろいろ歴史があるんですねー。

さて僕自身はvi(vim)の操作は移動方法と終了方法がわかるくらいで、ギリギリvisudoで設定編集できるくらいなんですがちょっと観光するくらいの気持ちでevil.el挑戦してみました。あまり急にviっぽい操作を入れるとなかなかストレスフルなので、かなりEmacsよりの設定になっています。

Evilの設定

一般的な設定

(require 'evil)

(setq evil-default-cursor 'box ; 'hbar box
evil-normal-state-cursor '("#Ff00ff")
evil-insert-state-cursor '("#4169e1" (bar . 2))
evil-emacs-state-cursor '("#00ced1" (bar . 2))
evil-cross-lines t
;; Do not move eol when normal state
evil-move-cursor-back t)

;; window移動するときcursorを更新
(advice-add 'other-window :after 'evil-refresh-cursor)

Emacsよりのevilにする設定:キーバインドまとめて無効化するのにmykie.el というキーバインド拡張を利用しています。(作者によるステマ)

(require 'cl-lib)
(require 'mykie)
;; Override Evil's keybinds
;; (自分が使わない)一部のEvilキーバインドを無効化する
(cl-dolist (map `(,evil-normal-state-map
,evil-motion-state-map))
;; 以下の設定で指定したキーが無効化され、global-mapのキーが利用され
;; るようになる
(mykie:set-keys map
"C-e" "C-o" "C-r" "C-s" "C-t" "C-w" "C-z" "C-^" "C-="
"M-n" "M-p"))

(setq
;; デフォルトのevilの状態をemacsに(それevil使う意味ry)
evil-default-state 'emacs
;; term-mode or eshell-mode didn't work well in my environment.
;; For more info, see `evil-emacs-state-modes', `evil-insert-state-modes' or
;; `evil-motion-state-modes'.
evil-insert-state-modes nil)

;; insertモードはemacsモードです
(advice-add 'evil-insert-state :override 'evil-emacs-state)

自分の設定を解説すると、最初のdolistの部分はnormalモードとmotionモードの一部のキーでglobal-mapのキーが使いたいので無効化しています。evil-insert-state-modesについては、デフォルトではterm-modeやeshell-modeが入っていましたがこのままだと自分が設定した各モード用のキーバインドが反映されなかったのでnilとして default のstateをemacsとして使っています。

あと最後のevil-insert-stateの設定については、あまりこういうことはしたくないのですがorg-modeでtabキーでorg-tableを広げられなかったり上述のterm-modeやeshellの問題があり、各モードごと設定するのはめんどうかなと思い、このように設定しました。(何かよい解決策あれば教えてください)

InsertモードからNormalモードへの切替え

ESC と C-[ はちょっと押しづらいと感じていて、muhenkanキーに割り当てています。これもmykie.elを利用していて、2回押したらmagitを起動するようにしてます。

(mykie:set-keys global-map
"<muhenkan>"
:default
(if (bound-and-true-p evil-mode)
(call-interactively 'evil-normal-state)
nil)
:repeat magit-status

"C-e"
;; C-u2回押したあと、C-eでevil-modeになる
;; mykieがこんな設定もできるよという例なので、:C-uとregion&C-uはいりません。
:default end-of-line
:C-u eww
:C-u*2 evil-mode
:region&C-u align)

おわり

こんな感じでevil.el使い始めました。ほんとはvi.elが一度も登場しないもやもやとした構成も考えましたがさすがにあれかなぁと思って最初にちょっと書きました。

桐島、部活やめるってよ (本編BD+特典DVD 2枚組) [Blu-ray]
バップ (2013-02-15)
売り上げランキング: 6,195

0 件のコメント:

コメントを投稿

Popular Posts

Blogger templates

Blogger news