私は使用していますがido-mode、私が嫌いなことの1つは、キーをC-x C-f使用up/downして最近開いたファイルを循環させることができないためiswitchbです。idoこのように動作するように設定するにはどうすればよいですか?
私は使用していますがido-mode、私が嫌いなことの1つは、キーをC-x C-f使用up/downして最近開いたファイルを循環させることができないためiswitchbです。idoこのように動作するように設定するにはどうすればよいですか?
回答:
ido-mode(M-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を終了して再起動し、以前開いていたファイルバッファーに切り替えることができます。
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は、最近開いたファイルを循環する必要があります。完全停止。
ido-use-virtual-buffersすばらしい機能で、デフォルトでIMOが有効になっているはずです。
バインディングは時間とともに進化していますが、今日の時点でido-find-fileまたはを呼び出すido-find-file-read-onlyと、デフォルト構成で使用可能な次のバインディングを使用できます。
ido-prev-work-fileido-next-work-fileこれらは、idoを試す前に慣れていたM-pand M-nバインディングほど人間工学的に快適ではないこととは別に、低速であり、結果として生じるミニバッファーのチャタリングは気を散らし、混乱させます。idoは、最近開いたファイル名を表示するだけではありません。「 ' file name ' ...を検索しています」と報告され、おそらく存在しないファイルの名前を提供することに抵抗があります。
「Searching for」メッセージはfunctionから来ていますido-make-merged-file-list。sourceを読むと、この関数が実行している魔法を無効にする方法がわかりません。
あなたは再バインド検討することido-prev-work-fileとido-next-work-file同様、より自然なものにペアをC-M-pしてC-M-n、または現在のスワップM-p(ido-prev-work-directory)とM-n(ido-next-work-directoryこれらのために)のバインディング。
ここで復元するのEmacs LispコードであるM-pとM-nし、デフォルトのディレクトリに焦点を当てたバインディングを移動し、最近のファイルを循環へC-M-pとC-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)))))
@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提供
helm-for-filesファイル名の自動補完と優れた検索インターフェイスの目的で、上記の回答のいずれよりも優れた結果が得られました。また、任意の検索項目を含めるように構成できます。