http://rubikitch.com/に移転しました このページをアンテナに追加 RSSフィード

2009-12-24

[][]人は俺を「recentfマスター」と呼ぶ

Emacsを使ってるみんな、recentfというパッケージを知っているかい?

「最近使ったファイル」を上から順に並べていってすぐに切り換えられるようにするヤツだ。最近使ったものを一番上の見易い位置に置いておくのは超整理法の手法で、すこぶる便利だ。知らない人はすぐに使おう。

ただ、デフォルトのrecentfのインターフェースはどうしようもなく使いづらい。ダイアログとかごちゃごちゃになってるし。たかだか超整理法の実装に1360行もあるってどういうことなの?そのまま使っていても、いまいち便利さに気付かないかもしれない。こんなのは空気のようなツールであるべきで、使い方を覚えるようなものではない。

anything.elから最近使ったファイルアクセスする

そこで、anything.elの出番だ。auto-install.elを使って M-x auto-install-batch anything でanything.elインストールしよう。

(require 'anything-startup)

.emacs入れるだけでとりあえず使えるようになる。そして、 M-x anything-for-files を実行しよう。パターンにマッチするバッファ、最近使ったファイル(recentf)、ブックマーク、locateから一括して検索してくれるぞ。こんなふうに。

http://www.rubyist.net/~rubikitch/archive/anything-for-files.png

これで、あたかもバッファを選択するかのように最近使ったファイルアクセスできるぞ。いちいち長ったらしいディレクトリを入力しなくて済むのでかーなーり効率が上がる。

recentfを拡張する

ただ、recentfにもちょっと欠点がある。

その欠点を解消するために recentf-ext.elを作成した。

ファイルを使うってことは、べつにfind-fileに限らない。switch-to-bufferでファイルバッファアクセスすることも含まれるだろう。ってなことで、前者はバッファを表示した時点でファイルを使ったとみなすことにする。

ディレクトリだってファイルの一種なのでディレクトリだけ差別するのは不公平だ。だからdiredバッファもrecentfで扱うようにしてみた。

M-x install-elisp-from-emacswiki recentf-ext.elインストールしよう。.emacs

(require 'recentf-ext)

記述するだけでrecentf-modeとともにこの拡張が有効になるぞ。これらのことは実質10行のコードで実現できる。

recentfは、もっと評価されるべきなんだよ。ガンガン使おうぜ!

返信

anything-match-pluginにfuzzyマッチも加えることは理論上可能です。matchとsearchを定義すればいいです。速度面とかどうなんでしょうね。

名無し名無し 2009/12/29 18:05 anything-match-pluginの話になるのかもしれませんが,ido-modeのido-enable-flex-matchingのような絞り込みはできないでしょうか?

例えば,"hoge"を入力して絞り込むときは,"h.*o.*g.*e"のような正規表現などで絞り込むような機能です
慣れたファイル名とかを打つときは早く打ちすぎて,途中の文字が抜けることがあるので,こういった機能があると便利です

anythingは非常に素晴らしいのですが,この機能だけはいまだにido-modeが羨しいです
fuzzy matchだとかskip matchとかいう呼び方も聞いたことがあります

tkf41tkf41 2012/03/26 00:05 recentf-ext がトップレベルで (recentf-mode 1) を呼んでいるので,設定によってはハマることがあります.

以下のような設定で問題が発生します.

(require 'recentf)
(require 'recentf-ext) ; (recentf-mode 1) が呼ばれている
(setq recentf-save-file "~/.emacs.d/recentf")
(recentf-mode 1) ; (recentf-save-list) が呼ばれない

この設定では, recentf-save-file を変更した後に recentf-mode をよんでもその変更が反映されません.


問題を回避するには

(require 'recentf)
(setq recentf-save-file "~/.emacs.d/recentf")
(require 'recentf-ext)
(recentf-mode 1) ; なくてもいい

または

(require 'recentf)
(require 'recentf-ext)
(setq recentf-save-file "~/.emacs.d/recentf")
(recentf-mode 1)
(recentf-save-list)

とする必要があります.

大学院生大学院生 2013/06/24 17:35 こんにちは。recentfユーザーです。

外付けHDDの中のファイルの履歴について質問があります。
一度利用した外付けHDDのファイルの履歴が、外付けHDDを付けていない
状態でemacsを起動すると消えてしまいます。
どうしたら良いのでしょうか?ご教授願います

rubikitchrubikitch 2013/06/24 18:32 デフォルトの設定だと、読めない(存在しない)ファイルはrecentf-listから削除されるので
(setq recentf-auto-cleanup 'never)
を入れて回避してください。

大学院生大学院生 2013/06/25 00:54 rubikitchさんへ

御回答有り難うございます。
うまくいきました。

recentfをrequireしたあとに、(setq recentf-auto-cleanup 'never)
を入れないといけないのですね。最初は、recentfをrequireした後に
(setq recentf-auto-cleanup 'never)をしていたためうまくいきませんでした。

これでemacsが更に便利になりました。
ありがとうございました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証