idoモードで最近開いたファイル


12

私は使用していますがido-mode、私が嫌いなことの1つは、キーをC-x C-f使用up/downして最近開いたファイルを循環させることができないためiswitchbです。idoこのように動作するように設定するにはどうすればよいですか?

回答:


16

ido-modeM-x customize-group RET ido RET)のカスタマイズオプションを見ると、説明したサイクリング動作を有効にするオプションが表示されません。

ただし、initファイルに次を追加できます。

(require 'recentf)

(defun ido-recentf-open ()
  "Use `ido-completing-read' to find a recent file."
  (interactive)
  (if (find-file (ido-completing-read "Find recent file: " recentf-list))
      (message "Opening file...")
    (message "Aborting")))

(global-set-key (kbd "C-x C-r") 'ido-recentf-open)

これを設定すると、を押しC-x C-rて、最近開いたファイルを選択するためのIdo完了を取得できます。

デフォルトでは、最新の20個のファイルが履歴に保持されます。次のように設定して、150程度まで上げることをお勧めしますrecentf-max-saved-items

(setq recentf-max-saved-items 150)

ボーナス:最近のファイルへのアクセス、ステロイド版

多くの場所で言及されていませんが、Ido Virtual Buffersを使用すると、最近のファイルに簡単にアクセスできます。次のように有効にします。

(setq ido-use-virtual-buffers t)

あなたが得る行動はこれです:

以外の場合は、nil既存の(「仮想」)バッファと既存のバッファを参照します。

基本的には次のように機能します。ファイルにアクセスしていて、バッファがによってクリーンアップされたとしmidnight.elます。後で、そのバッファに切り替えたいが、開いていないことがわかります。仮想バッファを有効にすると、バッファ名はバッファリストに残り(ido-virtualフェイスを使用し、常に最後に)、選択すると、ファイルを再び開きます。これにより、最近開いたファイルがまだ開いているかどうかについて考える必要がなくなります。ほとんどの場合、Emacsを終了して再起動し、以前開いていたファイルバッファーに切り替えることができます。


これまでのところ、私はそれをテストし、それがどのように機能するかを理解するときに受け入れます。(Lispの私の理解は非常に貧弱です)。
WeSenseASoulInSearchOfAnswers 14年

@WeSenseASoulInSearchOfAnswersもちろん、時間をかけてください。私が投稿したコードについて特定の質問がある場合はお知らせください。
itsjeyd 14年

私は受け入れましたが、率直に言って、C-x C-r新しいファイルを開くことができないため、私はそれが好きではありません。また、単純な方法でカスタマイズすることはできないことにも驚いています。の歴史はC-x C-f非常に明白な機能なので、なぜidoまだ実装されていないのか理解できません。たとえばM-x up/down、最近のコマンドのM-% up/downサイクル、emacsの外部でも、最近のクエリ置換のサイクル-bashまたはzshとしてのすべてのシェルはup / downを使用して前のコマンドを呼び出します。私にとってC-x C-f up/downは、最近開いたファイルを循環する必要があります。完全停止。
WeSenseASoulInSearchOfAnswers 14年

@WeSenseASoulInSearchOfAnswers私はあなたに同意しますが、なぜこれが利用できないか、すぐにカスタマイズできないのか分かりません。個人的には、答えで説明した仮想バッファ機能を使用しているため、大したことではありません。したがって、最近のファイルへの切り替えは、別のバッファへの切り替えと同じです。本当に簡単です。しかし、使用している機能が利用できない場合、イライラする可能性があることを理解しています。
itsjeyd 14年

5
+1- ido-use-virtual-buffersすばらしい機能で、デフォルトでIMOが有効になっているはずです。
ジョンO.

2

バインディングは時間とともに進化していますが、今日の時点でido-find-fileまたはを呼び出すido-find-file-read-onlyと、デフォルト構成で使用可能な次のバインディングを使用できます。

  • M-o 呼び出す ido-prev-work-file
  • C-M-o 呼び出す ido-next-work-file

これらは、idoを試す前に慣れていたM-pand M-nバインディングほど人間工学的に快適ではないこととは別に、低速であり、結果として生じるミニバッファーのチャタリングは気を散らし、混乱させます。idoは、最近開いたファイル名を表示するだけではありません。「 ' file name ' ...を検索しています」と報告され、おそらく存在しないファイルの名前を提供することに抵抗があります。

「Searching for」メッセージはfunctionから来ていますido-make-merged-file-listsourceを読むとこの関数が実行している魔法を無効にする方法がわかりません。

あなたは再バインド検討することido-prev-work-fileido-next-work-file同様、より自然なものにペアをC-M-pしてC-M-n、または現在のスワップM-pido-prev-work-directory)とM-nido-next-work-directoryこれらのために)のバインディング。

ここで復元するのEmacs LispコードであるM-pM-nし、デフォルトのディレクトリに焦点を当てたバインディングを移動し、最近のファイルを循環へC-M-pC-M-n、それぞれは:

(add-hook 'ido-setup-hook
          (lambda ()
            (let ((kmap ido-file-dir-completion-map))
              (let ((key '(meta ?n)))
                (define-key kmap (vector (cons 'control key))
                  (lookup-key kmap (vector key)))
                (define-key kmap (vector key) 'ido-next-work-file))
              (let ((key '(meta ?p)))
                (define-key kmap (vector (cons 'control key))
                  (lookup-key kmap (vector key)))
                (define-key kmap (vector key) 'ido-prev-work-file)))))

1
Emacs SEへようこそ!元のポスターの質問に焦点を当てるようにしてください。「ミニバッファチャタリング」についてのあなたのコメントは確かに興味深く、関連していますが、質問に対する実際の答えを見つけるのを妨げます。さらに重要なことは、答えを…という形で表現してみてください。あなたが書いたものはコメントのように読みますが、これはこのようなQ&Aサイトにはあまり適していません。
パプリカ14年

さて、最初の段落とその次のリストは、最近開いたファイルを循環するキーを探していた元の質問に答えます。これらのバインディングはデフォルトで存在しますが、ここでの他の回答のどれもこれらのバインディングについて言及していません。私はコードの再バインドに取り組んでおり、満足したら回答にそれを含めます。
SEH

2

この場合に私が頼ったことは、idomodeでCfを入力して通常のミニバッファーの動作に戻ることです。次に、通常の履歴閲覧キーがあります。前もって知っていれば、簡単にできます:Cxff :-)


1

@itsjeydによる答えはかなり完全です。関数を提案させてください:

(defun ido-choose-from-recentf ()
  "Use ido to select a recently visited file from the `recentf-list'"
  (interactive)
  (find-file (ido-completing-read "Open file: " recentf-list nil t)))

;; bind it to "C-c f"
(global-set-key (kbd "C-c f") 'ido-choose-from-recentf)

WikEmacs提供


1

helm-for-filesファイル名の自動補完と優れた検索インターフェイスの目的で、上記の回答のいずれよりも優れた結果が得られました。また、任意の検索項目を含めるように構成できます。


1
@Drewヘルムには、idoモード自体が付属しています。ほとんどの場合、人々はこの投稿を検索するときに、問題を解決するための他の選択肢を知ることに興味があるかもしれません。
user10375
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.