Help us understand the problem. What is going on with this article?

recentfでらくちん高速ファイルオープン

More than 3 years have passed since last update.

みなさまはファイルを開きますか? Emacsの履歴機能、使ってますか?

こんにちは、私のEmacsを起動する.emacs Advent Calendar 2016のお時間です。

recentfとは何か

テキストエディタの基本的な機能である「最近開いたファイル」を実現するEmacs標準の機能です。標準機能ですがデフォルト設定されてません。

基本的な概念の紹介は@tomoyaton1Emacs で最近開いたファイルのリストを自動保存する。 - 日々、とんは語る。が参考になります。

私の設定は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のブックマーク機能2Projectileなんかも有名です。

でも、いろいろ覚えなくても履歴から開く程度の雑さが気に入ってます。

私はC-c tのような押しやすいキーをhelm-recentfに指定して、すぐに開けるようにしてます。

補完インターフェイスとrecentf

Emacsには入力を補完するためのフレームワーク的なライブラリがいくつかあります。詳細は君は誰とEmacsる? (補完インターフェイス紹介篇)をお読みください。

さて、このようなライブラリを利用すればおてがるにファイル名を絞り込んで開くことができます。

ただし、IDOはデフォルトでrecentfを候補にして開く機能はないので、以下のようなコマンドを.emacsファイルで定義してやると良いです。

~/.emacs.d/init.el
(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でファイルを高速に開く方法はいくつかあるのですが、履歴を残しておくことで十分高速にファイルを開けるんじゃよ、って話でした。

脚注


  1. 「Emacs実践入門」と「Atom実践入門」を書いた大竹智也さんです 

  2. 異常に雑な英語でドキュメントを書いたら、初めて英語のわかるひとからPRが届いてしまったやつ 

  3. Emacsのブックマーク機能 - tototoshi の日記 

tadsan
僕に警備する自宅をください。Emacs初心者。Rubyist。 全ての投稿された記事は別段の表記がない限りはCC 3.0 BY-SA https://creativecommons.org/licenses/by-sa/3.0/deed.ja で二次利用できます。 記事中に含まれる全てのコードスニペットの著作権は抛棄するので、煮るなり焼くなりお好きにどうぞ。
https://tadsan.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away