目標:カーソルの位置を変えないまま、全行のインデントを整える
emacsで真面目に全行のインデントを整えようとすると、
C-x h (mark-whole-buffer)
C-M-\ (indent-region)
の2段階を踏まなければなりません。それどころか、上記のC-x h
の段階でカーソルがバッファの一番最初に来てしまうため、コーディングが途中だった場合最後に作業をしていた行まで戻る必要があります。
コードが完成した後に体裁を整えるために全行インデントをする場合ならまだ我慢できなくもないのですが、まさにコードを書いている途中で「見難くなったからインデントしてみるか」と思った場合に上記の手順を踏むのはかなり面倒くさいです。
この度いろいろと試行錯誤を重ねて「カーソルを移動させないままの全行インデント」が可能になったので備忘録。
方法
1. point-undoのインストール
まず前提として、emacsに"point-undo"が入っている必要がある。"point-undo"のインストールの仕方はこちらを参照のこと。
2. .emacs.elの編集
2.1. 新しい関数の定義
"point-undo"がインストールできたら、~/.emacs.el
に以下の5行を書き込む。
(defun all-indent ()
(interactive)
(mark-whole-buffer)
(indent-region (region-beginning)(region-end))
(point-undo))
以上で、「カーソルを移動させないまま全行インデントする」という操作を行う"all-indent"という新しい関数を定義することができた。
2.2. 新しい関数のキーバインドへの割り当て
~/.emacs.el
に、続けて以下の1行を書き込む。
(global-set-key (kbd "C-x C-]") 'all-indent)
以上で、"all-indent"を"C-x C-]"のキーバインドで実行することができるように設定できた。
(割り当てるキーバインドは個人の好みで変えてよい。)
3. 設定の反映
emacsを再起動させるか、M-x eval-buffer
で設定を更新する。
以上で、"C-x C-]"により「カーソルを移動させないまま全行のインデントを整える」ことができるようになりました。