Wie vervollständige ich Dateipfade in Emacs?


14

Angenommen, ich bearbeite eine Konfigurationsdatei und möchte einen Pfad eingeben. Gibt es ein Plugin für Emacs, mit dem Sie einen Dateipfad in diesem Puffer vervollständigen können? Ich habe danach gesucht und es gibt sozusagen eine Unmenge von Vervollständigungs-Plugins.


1
Mir ist nicht klar, was Sie hier fragen. Moderne Emacen haben eine Pfadvervollständigung im Minipuffer (wenn sie find-filezum Beispiel verwenden). Möchten Sie ein ähnliches Verhalten in einem Inhaltspuffer?
dmckee

1
@dmckee - Ja, genau das suche ich.
Jason Baker

@dmckee Ist das Betriebssystem spezifisch? Ich hatte die Vervollständigung des Dateinamens in Find File in Ubuntu, aber es gibt keine Vervollständigung in OSX. Zum Beispiel habe ich eine Datei mit dem Namen "reference" im Stammverzeichnis und bin im Minipuffer: "Find file: ~ /" und ich gebe "ref" ein und erwarte den Abschluss, aber es passiert nichts. Muss ich etwas installieren?
Zeynel

@Zeynel Funktioniert auch unter Mac OS einwandfrei. Entweder mit der von Apple installierten Version oder der Homebrew-Version. Funktionierte auch mit der Fink-Version auf meinem älteren Rechner.
dmckee

@ dmckee Seltsam. Vielleicht stelle ich eine neue Frage. Vielen Dank.
Zeynel

Antworten:


10

Probieren Sie Hippie Expand aus , was eine seiner Möglichkeiten ist try-complete-file-name. Sie können die Reihenfolge und Liste der Erweiterungsfunktionen ändern, die Hippie Expand verwendet, um den Dateinamen zu erweitern.

Sie können auch einen benutzerdefinierten Wrapper schreiben, der nur die Dateinamenerweiterung ausführt. So etwas wie:

(global-set-key (kbd "C-M-/") 'my-expand-file-name-at-point)
(defun my-expand-file-name-at-point ()
  "Use hippie-expand to expand the filename"
  (interactive)
  (let ((hippie-expand-try-functions-list '(try-complete-file-name-partially try-complete-file-name)))
    (call-interactively 'hippie-expand)))

14

Ich tippe in der Regel Ctrl- X Ctrl- Fwie ich eine Datei öffnen würde, aber statt des Drückens RETI drücken Ctrl- A Ctrl- K Ctrl- Gden Pfad zu kopieren und fügen Sie ihn in den Puffer I mit redigierte Ctrl- Y.

Ich brauche das nicht oft genug, aber wenn ich wirklich eine bessere Lösung haben möchte, würde ich auf jeden Fall Trey Jacksons Lösung verwenden hippie-expand. Ich dachte darüber nach, wie hippie-expandich das besser machen könnte, als ich das erste Mal antwortete, aber ich wusste es nicht und war zu faul, um es nachzuschlagen, also schrieb ich einfach, was ich tue.


Klobig und unelegant, aber arbeitend. Ich muss zugeben, dass ich das von Zeit zu Zeit selbst mache. Ich bin immer noch an einer saubereren Lösung interessiert ...
dmckee

Tatsächlich. Es scheint nicht wirklich viel weniger Arbeit zu sein, als es manuell einzutippen.
Jason Baker

1
@Jason Baker: Es kommt darauf an, ob du den genauen Dateinamen kennst oder ob du etwas dafür erforschen musst.
Teddy

6

Die Vanille, von der Stange

M-x comint-dynamic-complete-filename

Funktioniert außerhalb des Comint-Modus. Natürlich können Sie die Minipuffer dynamische Expansion verwenden weniger Tastenanschläge zu verwenden , um es (zB Mx zu erhalten Comi nt- dy namic- c omplete -f ilename). Wenn Sie es häufig verwenden, können Sie es mit an eine Tastenfolge Ihrer Wahl binden global-set-key.



0

Ich habe kürzlich die Werke von Tomohiro Matsuyama (@ m2ym) entdeckt und war sehr beeindruckt von der Qualität der Emacs-Pakete.

Ich habe mit den meisten Auto-Vervollständigungs-Erweiterungen zu kämpfen gehabt und festgestellt, dass sie alle große Mängel aufweisen.

Sehen Sie sich Tomos automatische Vervollständigung an ( http://auto-complete.org/doc/manual.html ). Die Installation war ein Kinderspiel (ich arbeite unter Linux) und deckt viele Anforderungen an die automatische Vervollständigung auf moderne Weise ab.

Natürlich ist Ihre Anfrage nach der Vervollständigung von Dateinamen im Puffer perfekt abgedeckt.

Wenn Sie auch Ruby spielen, verpassen Sie nicht seine RSense- Erweiterung. wieder das beste seiner art.


Die Verbindung ist unterbrochen
xuhdev

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.