みなさまはファイルを開きますか? Emacsの履歴機能、使ってますか?
こんにちは、私のEmacsを起動する.emacs Advent Calendar 2016のお時間です。
recentfとは何か
テキストエディタの基本的な機能である「最近開いたファイル」を実現するEmacs標準の機能です。標準機能ですがデフォルト設定されてません。
基本的な概念の紹介は@tomoyaton1のEmacs で最近開いたファイルのリストを自動保存する。 - 日々、とんは語る。が参考になります。
私の設定はtomoyaさんの設定を完全にぱくったので、以下のような感じです。
(setq recentf-max-saved-items 2000) ;; 2000ファイルまで履歴保存する
(setq recentf-auto-cleanup 'never) ;; 存在しないファイルは消さない
(setq recentf-exclude '("/recentf" "COMMIT_EDITMSG" "/.?TAGS" "^/sudo:" "/\\.emacs\\.d/games/*-scores" "/\\.emacs\\.d/\\.cask/"))
(setq recentf-auto-save-timer (run-with-idle-timer 30 t 'recentf-save-list))
(recentf-mode 1)
(bind-key "C-c っ" 'helm-recentf)
(bind-key "C-c t" 'helm-recentf)
recentf-auto-cleanup
は存在しないファイルを消すための設定ですが'never
(消さない)に指定します。オフライン時にうっかりリモートサーバのファイルを開こうとしたところ、recentfの履歴が全滅してしまったことがあるからです。
recentf-exclude
のファイルは順にrecentf
(履歴ファイルそのもの)、Magitのコミット編集ファイル、タグファイル、TRAMPを使ってsudoを使ってほかのユーザの権限で開いたファイル、ゲームのスコアファイル、Caskでインストールされた依存ファイルです。
30秒に一度自動保存するのもtomoyaさんの受け売りです。この設定によってEmacs終了時以外にも履歴ファイルを保存してくれるようになるのでべんりです。
いつでもrecentf
Emacsでファイルを簡単に開く機能はいくつもあります。Emacsのブックマーク機能2やProjectileなんかも有名です。
でも、いろいろ覚えなくても履歴から開く程度の雑さが気に入ってます。
私はC-c tのような押しやすいキーをhelm-recentf
に指定して、すぐに開けるようにしてます。
補完インターフェイスとrecentf
Emacsには入力を補完するためのフレームワーク的なライブラリがいくつかあります。詳細は君は誰とEmacsる? (補完インターフェイス紹介篇)をお読みください。
さて、このようなライブラリを利用すればおてがるにファイル名を絞り込んで開くことができます。
ただし、IDOはデフォルトでrecentf
を候補にして開く機能はないので、以下のようなコマンドを.emacs
ファイルで定義してやると良いです。
(defun my/ido-recentf ()
(interactive)
(find-file (ido-completing-read "Find recent file: " recentf-list)))
そんな怪しげな仕組み、よくわかんないよ… ってひとはM-x recentf-open-files
でもふつうに開けます。ファイル数が多い場合はC-sで目当てなファイルを検索してやればいいです。
起動、そしてrecentf
Emacsの起動直後に何かやりたい、といふ私のために書いた記事が起動直後になんかする。recentfとかねです。そのときの私はEmacsの起動直後に履歴からファイルを絞り込んで開きたかったのです。
その成果物がinit-open-recentfです3。これはEmacs 24.4以上でないと動きませんが、補完インターフェイスと統合されてゐます。
るびきち師に紹介記事(init-open-recentf.el : Emacs起動時にrecentfを開く(ido/anything/helm対応))を書いていただきました。
ido/anything/helm対応
って書いてあるのですが、さっきIvy/Counselに標準対応しました ヾ(〃><)ノ゙
あとがき
Emacsでファイルを高速に開く方法はいくつかあるのですが、履歴を残しておくことで十分高速にファイルを開けるんじゃよ、って話でした。