anything-find-fileの代わりにanything-filelist+を使おう

anything-find-fileはデフォルトで無効に

この度、 anything-find-file をobsoleteにしました。 anything-read-string-modeを有効にしても、デフォルトではanything-find-fileは使われなくなります。 anything-startup.el経由でanything.elを使っていると、anything-read-string-modeが有効になります。

anything-read-string-modeは、バッファやファイルや補完をanythingインターフェースにするマイナーモードです。 補完入力関連のコマンドがanythingインターフェースに置き換えられます。 これからは、ファイル名入力は通常のEmacsのインターフェースに戻ります。

anything-find-file は、C-x C-f (find-file)をanythingインターフェースに置き換えたものです。 厳密には、find-fileのベースとなっている read-file-name 関数をanything化 (anything-read-file-name) しています。

無効にした理由は、欠点が多いことと、すでに優れたインターフェース (M-x anything-filelist+)が登場していることです。

どうしても使いたい場合は、.emacsに以下の行を追加します。


(anything-read-string-mode '(string file buffer variable command))

anything-find-fileはanything-obsolete.elに移動しました。 時代遅れ扱いなので、以後メンテナンス対象外です。

read-file-name は、思ったほど使われていない

Emacsでは、ファイル名入力が求められる場面は思っているほど多くはありません。 ファイル名入力は read-file-name 関数によるものと、コマンドのinteractive指定によるものです。 デフォルトでキー割り当てされているファイル名入力コマンドは、C-x C-f (find-file)、 C-x C-r (find-file-read-only)、 C-x C-v (find-alternate-file)、C-x C-w (write-file)、 C-x i (insert-file)くらいなものです。*1 意外なほどに少ないのです。

これらの使い道について考えてみます。 C-x C-fは新規ファイルと既存ファイルを開きます。 C-x C-r、C-x C-v、C-x iは既存ファイルを主に扱います。 C-x C-wは新規ファイルを受け付けます。

anything-read-file-nameは欠点が多い

既存ファイル名入力としてはいまいち

anything-read-file-nameは、既存のファイル名を入力する場合には、まだ使えます。 anythingの絞り込みがファイル名で使えます。 しかし、ディレクトリ名の絞り込みができません。 そのため、長いファイル名でないと恩恵を受けることができません。

新規ファイル作成にはかえって不便

anything-read-file-nameで新規ファイル名を入力する場合は、そのディレクトリのファイル名が絞り込まれるため、どうしても動作が鈍くなります。 遅いパソコンだと、anything-find-fileで新規ファイルを開こうとするとイライラした人がいるかもしれません。

新規ファイル名の入力は通常のEmacsのインターフェースが一番自然です。

TABを補完に割り当てるなどanything的にいびつ

anything-read-file-name は、Emacsの元の挙動に近づけるため、TABをディレクトリ移動や補完に割り当てています。 しかし、今になって考えてみれば、この決定は失敗でしょう。 なぜなら、anythingではTABはアクションリストです。 anythingインターフェースにもかかわらず、anything-read-file-nameのみTABの挙動が違うのは、かえってユーザを混乱させてしまいました。 TABを潰してしまったため、アクションが開けないという新たな欠点も出てきます。

むしろ、 read-file-name を使う場面は、アクションに追加するのがanything的です。 C-x C-f相当、C-x C-r相当(view-modeで開く)、C-x i相当の機能は、すでにanythingのアクションとして登録されています。

anything-filelist+で十分

anythingを使っていると、C-x C-fは新規ファイル作成時くらいにしか使わなくなります。 というのは、「最近使ったファイル (anything-c-source-recentf)」でほとんどのファイル名入力が間に合ってしまうからです。 anything-c-source-recentf は、 anything-read-file-name と違い、ディレクトリ名で絞り込みを行うことができます。 ファイル名で絞り込んでも候補が多い場合は、さらにディレクトリ名で絞り込めばいいのです。 また、最近使ったファイルに登録されていなくても、すでに作られたファイルリスト (anything-c-source-filelist) やlocateコマンド (anything-c-source-locate)で事実上すべての既存ファイルをまかなえます。

M-x anything-filelist+ は、最近使ったファイルと既存ファイルのリストの情報源を備えているのでファイル名はこれらに任せるのが今流です。 M-x anything-filelist+は anything-c-source-filelist を含んでいます。 ファイルリストはファイル名を並べたテキストファイルをgrepすることで超高速でファイル名を検索してくれます。 こちらのコマンドの方が新しいです。

M-x anything-for-filesは anything-c-source-filelist の代わりに anything-c-source-locateを含んでいます。 ただし、locateではファイル名を絞り込み検索できないという欠点が存在します。

*1:C-x 4系などは亜種なので除いておく。