Kürzlich geöffnete Dateien im Ido-Modus

12

Ich benutze ido-mode, aber eine Sache, die ich hasse, ist, dass C-x C-fich , nachdem ich keine up/downTasten zum Durchlaufen kürzlich geöffneter Dateien verwenden kann, wie es früher zum Beispiel bei war iswitchb. Wie kann ich mich idoauf diese Weise einstellen ?

WeSenseASoulInSearchOfAnswers
quelle

Antworten:

16

Wenn ich die Anpassungsoptionen für ido-mode( M-x customize-group RET ido RET) betrachte, sehe ich keine Optionen zum Aktivieren des von Ihnen beschriebenen Fahrradverhaltens.

Sie können Ihrer Init-Datei jedoch Folgendes hinzufügen:

(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)

Mit dieser Option können Sie auf drücken C-x C-r, um Ido für die Auswahl der zuletzt geöffneten Dateien abzuschließen.

Standardmäßig werden die 20 neuesten Dateien im Verlauf gespeichert. Ich schlage vor, Sie kurbeln das auf etwa 150 an, indem Sie Folgendes einstellen recentf-max-saved-items:

(setq recentf-max-saved-items 150)

Bonus: Zugriff auf aktuelle Dateien, On-Steroids Edition

Ich sehe es nicht an vielen Stellen erwähnt, aber Ido Virtual Buffers machen es super einfach , auf aktuelle Dateien zuzugreifen. Aktivieren Sie sie wie folgt:

(setq ido-use-virtual-buffers t)

Das Verhalten, das Sie erhalten, ist das folgende:

Wenn nicht nil, beziehen Sie sich auf frühere ("virtuelle") Puffer sowie auf vorhandene.

Im Wesentlichen funktioniert es wie folgt: Angenommen, Sie besuchen eine Datei und der Puffer wird von bereinigt midnight.el. Später möchten Sie zu diesem Puffer wechseln, stellen jedoch fest, dass er nicht mehr geöffnet ist. Bei aktivierten virtuellen Puffern bleibt der Puffername in der Pufferliste (unter Verwendung der ido-virtualFläche und immer am Ende). Wenn Sie ihn auswählen, wird die Datei erneut geöffnet. Auf diese Weise können Sie weniger darüber nachdenken, ob kürzlich geöffnete Dateien noch geöffnet sind oder nicht. Meistens können Sie Emacs beenden, neu starten und dann zu einem Dateipuffer wechseln, der zuvor geöffnet war, als wäre er es noch.

itsjeyd
quelle
Bisher habe ich abgestimmt, ich werde später akzeptieren, wenn ich es testen und verstehen werde, wie es funktioniert. (Mein Verständnis von Lispeln ist sehr schlecht).
WeSenseASoulInSearchOfAnswers
@WeSenseASoulInSearchOfAnswers Sicher, nehmen Sie sich Zeit. Lassen Sie mich wissen, wenn Sie spezielle Fragen zu dem von mir geposteten Code haben.
itsjeyd
Ich habe zugesagt, aber ehrlich gesagt mag ich es nicht, weil C-x C-res nicht möglich ist, eine neue Datei zu öffnen. Ich bin auch überrascht, dass es nicht möglich ist, es auf einfache Weise anzupassen. Die Geschichte von C-x C-fist ein so offensichtliches Merkmal, dass ich nicht verstehen kann, warum es noch nicht implementiert ist ido. Beispiel: M-x up/downDurchläuft die letzten Befehle, M-% up/downdurchläuft das Ersetzen der letzten Abfragen, auch außerhalb von Emacs. Alle Shells wie bash oder zsh verwenden up / down, um vorherige Befehle abzurufen. Für mich C-x C-f up/downsollte man die zuletzt geöffneten Dateien durchlaufen. Punkt.
WeSenseASoulInSearchOfAnswers
@WeSenseASoulInSearchOfAnswers Ich stimme Ihnen zu, und ich habe keine Ahnung, warum dies nicht sofort verfügbar oder anpassbar ist. Für mich persönlich ist dies keine große Sache, da ich die in meiner Antwort beschriebene Funktion für virtuelle Puffer verwende. Das Wechseln zu einer aktuellen Datei entspricht dem Wechseln zu einem anderen Puffer. wirklich einfach. Ich verstehe jedoch, dass es frustrierend sein kann, wenn eine gewohnte Funktion nicht verfügbar ist.
itsjeyd
5
+1 für ido-use-virtual-buffers- eine großartige Funktion, die standardmäßig aktiviert sein sollte.
Jon O.
2

Obwohl sich die Bindungen im Laufe der Zeit entwickelt haben, können Sie beim Aufrufen von ido-find-fileoder ido-find-file-read-onlydie folgenden Bindungen verwenden, die in der Standardkonfiguration verfügbar sind:

  • M-o ruft auf ido-prev-work-file
  • C-M-o ruft auf ido-next-work-file

Abgesehen davon, dass diese nicht so ergonomisch angenehm sind wie die M-pund M-nBindungen, an die ich vor dem Ausprobieren von Ido gewöhnt war, sind sie auch langsam und das daraus resultierende Minibuffer-Geschwätz ist ablenkend und verwirrend. ido zeigt nicht nur einen kürzlich geöffneten Dateinamen an. Es wird gemeldet, dass "Nach ' Dateinamen ' gesucht wird ...", möglicherweise aus Unwillen, einen Namen für eine Datei anzugeben, die nicht mehr existiert.

Die Meldung "Suchen nach" kommt von der Funktion ido-make-merged-file-list. Beim Lesen der Quelle sehe ich keine Möglichkeit, die Magie, die diese Funktion bewirkt, zu deaktivieren.

Sie können erwägen, das ido-prev-work-fileund -Paar ido-next-work-filean etwas Natürlicheres wie C-M-pund zu binden C-M-noder die aktuellen M-p( ido-prev-work-directory) und M-n( ido-next-work-directory) -Bindungen für diese zu tauschen .

Hier ist der Emacs Lisp-Code zum Wiederherstellen M-pund M-nDurchlaufen der zuletzt verwendeten Dateien, wobei die standardmäßigen verzeichnisorientierten Bindungen auf C-M-pbzw. C-M-nverschoben werden:

(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)))))
seh
quelle
1
Willkommen bei der Emacs SE! Bitte versuchen Sie, Ihre Antworten auf die Frage des ursprünglichen Posters zu konzentrieren. Sicherlich ist Ihr Kommentar zum "Minibuffer-Geschwätz" interessant und verwandt, aber es lenkt davon ab, eine tatsächliche Antwort auf die Frage zu finden. Noch wichtiger: Bitte versuchen Sie, Ihre Antwort in Form einer Antwort zu formulieren. Was Sie geschrieben haben, ist eher ein Kommentar, der für eine solche Frage- und Antwortseite nicht gut geeignet ist.
Paprika
Nun, der erste Absatz und die folgende Liste beantworten die ursprüngliche Frage, bei der nach Schlüsseln gesucht wurde, um durch kürzlich geöffnete Dateien zu blättern. Diese Bindungen sind standardmäßig vorhanden, aber in keiner der anderen Antworten wurden diese Bindungen erwähnt. Ich arbeite an dem Code zum erneuten Binden und werde ihn in meine Antwort aufnehmen, sobald ich damit zufrieden bin.
Seh
2

Ich habe in diesem Fall darauf zurückgegriffen, zum normalen Verhalten des Minipuffers zurückzukehren, indem ich Cf im Idomode eingebe. Dann haben Sie normale Verlaufsbrowserschlüssel. Wenn Sie es vorher wissen, kann es schnell gehen: Cxff :-)

dein Freund
quelle
1

Die Antwort von @itsjeyd ist ziemlich vollständig. Lassen Sie mich nur eine Funktion vorschlagen:

(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)

Mit freundlicher Genehmigung von WikEmacs

Nsukami _
quelle
1

Ich fand helm-for-filesWerke besser als jede der obigen Antworten, um den Dateinamen automatisch zu vervollständigen und eine schöne Suchoberfläche zu haben. Sie können es auch so konfigurieren, dass es beliebige Suchelemente enthält.

user10375
quelle
1
@Drew Helm kommt mit Ido-Modus selbst. Die meiste Zeit, wenn Leute diesen Beitrag durchsuchen, könnten sie daran interessiert sein, andere Alternativen zu finden, um das Problem zu lösen.
user10375