Wie kann ich den Dateinamen des aktiven Dateipuffers in einen Befehl einfügen?
Wenn ich einen Befehl aufrufe, der einen Dateinamen benötigt, tue ich dies häufig aus einem Dateipuffer und möchte den Namen dieser Datei, während ich den Befehl in den Minipuffer eingebe.
Ich suche nach einer Hypothese C-x…, die ich beim Bilden einer Befehlszeile im Minipuffer eingeben kann.
Wenn der aktuelle Puffer eine Datei mit dem Namen ist Lorem Ipsum.txt
, gebe ich Folgendes ein:
M-x grep RET 'foo' SPC C-x … RET
Das M-xgrepRETzeigt einen Minibuffer, der zur Eingabe des grep
Befehls auffordert . Als Antwort habe ich das Regex-Muster-Argument ( 'foo') eingegeben und das Dateinamen-Argument ( C-x…) eingefügt . Dieser Minipuffer endet wie folgt:
grep -nH -e 'foo' 'Lorem Ipsum.txt'
Welcher vorhandene Befehl erhält den Dateinamen des aktuellen Dateipuffers wie folgt? Was ist die Standardschlüsselbindung?
quelle
M-n
. Es funktioniert nicht überall, aber an vielen Orten. Außerdem, da du greppst, magst du vielleicht lgrep und rgrep, die ein bisschen interaktiver sind, denke ich.Antworten:
Leider gibt es keinen fertigen Befehl dafür, aber wir können einen wie folgt erstellen:
Die Magie steckt in der Minibuffer-Selected-Window- Funktion; Es macht das Richtige, indem es den letzten Puffer auswählt, bevor der Minipuffer aktiviert wurde. Andernfalls wird der Dateiname nicht in den Minipuffer übernommen, wenn nur der Name der Pufferdatei verwendet wird. Interessanterweise kann dieselbe Funktion in einem regulären Puffer oder Minipuffer zum Einfügen des Dateinamens verwendet werden. Es ist keine besondere Behandlung erforderlich.
Es gibt keine, aber Sie können eine passende auswählen und sie wie folgt zuweisen:
Fügen Sie die obigen Lisp-Codezeilen in Ihre init.el-Datei ein.
Dies funktioniert in den meisten trivialen Fällen, ist jedoch schwer vorherzusagen, welche Konflikte möglicherweise mit den Modi auftreten, die Sie beim Aufrufen dieser Funktion aktiviert haben.
Was ist, wenn der Puffer keinen gültigen Dateinamen aufruft, z. B. den Arbeitspuffer? Dann wird dieser Fehler im Echobereich angezeigt:
Das Auswählen eines gültigen Puffers mit einem richtigen Dateinamen vor dem Aufrufen der Verknüpfung vermeidet solche Fehler.
Es gibt verschiedene andere Lösungen wie die oben genannten, sie unterscheiden sich jedoch hauptsächlich darin, wie sie mit Ausnahmen oder Überschreibungen für Konflikte umgehen. Einige verwenden beispielsweise Modus-Hooks, um diese Funktion nur in bestimmten Modi verfügbar zu machen.
quelle
enable-recursive-minibuffers
.(define-key minibuffer-local-map (kbd "C-c f") 'name-of-the-file)'. In addition to this useful function I also created the function
des Puffernamens verwendet werden, an den ich gebunden habeC-c b
, wodurch der aktuelle Puffername eingefügt wird .Bei Verwendung
dired-x
der TastenkombinationC-x C-j
ist gebunden andired-jump
. So landen Sie aus Ihrem Dateipuffer in der richtigen Zeile und können den Dateinamen mit kopierenw
. Und dann können Sie es in den Minipuffer einfügen.Eine weitere Möglichkeit, die Eingabe des Dateinamens zu erleichtern, ist die standardmäßige Vervollständigung der Emacs-Minipufferdatei. Geben Sie einfach die ersten Zeichen Ihres Dateinamens und dann die Tabulatortaste ein.
quelle
w
(Befehldired-copy-filename-as-kill
) in die aktuelle Dired-Zeile kopieren .In der Frage wird nach einem vorhandenen Emacs-Befehl gefragt, der dies ausführt.
Wie bereits gesagt:
was sich als Antwort auf diese Frage herausstellt.
quelle