「The 6 Emacs Settings Every User Should Consider」を見て、Emacsには、パッケージを何も入れなくても、快適に作業するための機能が最初から揃っていることにびっくりしました。
多くのソフトでは、新機能が追加されるとデフォルトでオンになり、「機能の押し付け」があります。
一方、Emacsでは、標準機能でも自分で見つけないと使えないんですね。
;; 作業の文脈を記憶
(recentf-mode 1)
(savehist-mode 1)
(save-place-mode 1)
;; 思考を止めない環境
(global-auto-revert-mode 1)
(setq auto-revert-remote-files t)
(setq global-auto-revert-non-file-buffers t)
(setq use-dialog-box nil)
;; 設定の分離
(setq custom-file (locate-user-emacs-file "custom-vars.el"))
(load custom-file 'noerror)
Code language: PHP (php)
1. 作業の文脈を記憶させる
エディタを開くたびに「さっきどこまでやったっけ」と思い出す時間は、意外と負担になります。
Emacsにはこの問題を解決する3つの機能があります。
;; 作業の文脈を記憶する
(recentf-mode 1)
(savehist-mode 1)
(save-place-mode 1)
1.1. recentf-mode
recentf-modeは最近使ったファイルを記憶してくれます。
「あのファイル、どこだっけ」と探す手間が減るのは思った以上に快適です。
1.2. savehist-mode
savehist-modeを有効にすると、ミニバッファで打ったコマンドや検索ワードの履歴が次回も使えます。
何度も同じ単語を検索するときに、毎回タイプし直す必要がなくなります。
1.3. save-place-mode
そして、save-place-mode。
これはファイルを開いたとき、前回閉じた場所にカーソルを戻してくれる機能です。
長い文章を編集しているときに、開くたびにファイルの先頭に戻されるストレスから解放されます。
2. 思考を止めない環境を作る
作業中に突然「このファイルが変更されました。
再読み込みしますか?」と聞かれると、集中が途切れます。
Gitで別のブランチに切り替えたときなど、こうした場面は頻繁に起こります。
2.1. global-auto-revert-mode
global-auto-revert-modeを有効にしておくと、ディスク上でファイルが変わったときに自動で再読み込みしてくれます。
確認のダイアログも出ません。
(global-auto-revert-mode 1)
(setq auto-revert-remote-files t)
(setq global-auto-revert-non-file-buffers t)
Code language: PHP (php)
2.2. auto-revert-remote-files
Auto Revertモードはリモートファイルのチェックやリバートは、通常は低速なので行いません。この挙動は変数auto-revert-remote-filesを非nilにセットして変更できます。
2.3. global-auto-revert-non-file-buffers
2行目の設定を加えると、Dired(ファイル管理画面)なども自動更新されます。
ディレクトリの中身が変わったのに表示が古いまま、という状況がなくなるわけです。
3. 設定ファイルを汚さない工夫
Emacsのカスタマイズ画面(M-x customize)を使うと、設定が自動的にinit.elに書き込まれます。
自分で書いたコードと混ざると、後で読み返したときに「これは何だったか」と混乱することがあります。
この問題にはcustom-fileという変数で対処できます。
(setq custom-file (locate-user-emacs-file "custom-vars.el"))
(load custom-file 'noerror)
Code language: PHP (php)
自動生成されたコードは別のファイルに保存され、init.elは自分が意図した設定だけが残ります。
4. 標準機能にある
これらは「エディタとの対話を減らす」設定です。
これらの機能はすべてEmacs本体に含まれています。
つまり、インターネットに接続できない環境でも、新しいPCでも、設定ファイルさえあればすぐに同じ環境を再現できます。
| 機能 | 導入バージョン | リリース年 | 補足 |
|---|---|---|---|
| recentf (最近使ったファイル) | 21.1 | 2001年 | GUI機能が大幅強化された際に追加 |
| savehist (入力履歴保存) | 22.1 | 2007年 | 以前は外部パッケージが主流でした |
| save-place (カーソル位置記憶) | 19.34 | 1996年 | 機能自体は古く、25.1で使いやすく改善 |
| custom-file (設定の分離) | 20.1 | 1997年 | Custom UIが導入された際から存在 |
| auto-revert (自動更新) | 21.1 | 2001年 | global-auto-revert-mode として導入 |
標準機能はEmacsの歴史とともにメンテナンスされているため、10年後も同じコードが動く可能性が高いのです。
ファイルの状態を自動で同期する。
前回の作業状態を記憶しておく。
これらはすべて、「ユーザーが判断や操作を求められる場面」を減らす方向に働きます。
言い換えると、Emacsを「道具」から「環境」に変えるための設定だと捉えています。
道具は使うたびに準備が必要ですが、環境は入った瞬間から作業を始められます。