Emacsのウィンドウ操作を快適にする2つの拡張。

今日は Emacs のウィンドウ操作を快適にしてくれる、windmove.el と winner.el を紹介しましょう。ともに、標準搭載なので、すぐにでも使い始めることができます。

ウィンドウ分割時の移動を修飾キー+矢印にする windmove.el。

Emacsのウィンドウを移動するには、標準だと C-x o (switch-window) を使うのですが、ウィンドウを分割しまくると、これで移動するのが大変ストレスフルです。そこで、C-t などのシングルキーにバインドするのがよくある解決法ですが、これも快適とは言い難かったりします。
そこで、本日ご紹介するのが、矢印キーによる直感的なウィンドウ移動を実現してくる windmove.el です。

利用は簡単以下の設定をあなたの設定ファイルに書くだけ。

;;; windmove
;; (windmove-default-keybindings) ; 引数なしの場合は Shift
;; Alt + 矢印でウィンドウを移動する
(windmove-default-keybindings 'meta) ; Alt の場合は meta を指定
;; Mac の Command + 矢印でウィンドウを移動する
;; (windmove-default-keybindings 'super) ; Macの人はこちらをオススメ

すると、あら不思議、修飾キーを押しながら矢印キーを押すだけで、ヌルヌルウィンドウが移動できるようになるのです!
なお、分割も C-x 2(上下に分割)とか、C-x 0(カンレントwindowを消去)など、結構覚えにくいキーバインドだったりするので、僕は以下のようなキーバインドに割り当てています。

;; Mac の command + 3 でウィンドウを左右に分割
(define-key global-map (kbd "s-3") 'split-window-horizontally)
;; Mac の Command + 2 でウィンドウを上下に分割
(define-key global-map (kbd "s-2") 'split-window-vertically)
;; Mac の Command + 1 で現在のウィンドウ以外を閉じる
(define-key global-map (kbd "s-1") 'delete-other-windows)
;; Mac の Command + 0 で現在のウィンドウを閉じる
(define-key global-map (kbd "s-0") 'delete-window)

元のC-x 1, C-x 2, C-x 3, C-x 0 と合わせているので、覚えやすいはずなのですが、なぜか2と3が未だに逆になったりします。

ウィンドウ操作の履歴をundo/redoする winner.el。

役に立つかどうかは知りませんが、例えば意図せずウィンドウを閉じてしまったときに、ウィンドウを復活させたりすることができるのが winner.el です。

;;; winner-mode
(when (fboundp 'winner-mode)
  (winner-mode t))

こちらも導入は簡単。設定ファイルに上のように書くだけ。fboudp の行も不要なくらいです。
すると C-c (winner-undo) と C-c (winner-redo) の2つのコマンドが利用できるようになります。
winner-undo はもちろんウィンドウの状態を元に戻すコマンドです。ウィンドウ分割だけではなく、バッファの移動履歴も対象です。履歴マニアな方は、ぜひ導入しておくと良いでしょう。
そんな感じで、今日はEmacsのウィンドウ操作を便利にする機能を紹介してみました!
ちなみに、僕はどっちも利用していません!!