Welcher vorhandene Befehl erhält den Dateinamen des aktuellen Dateipuffers wie folgt?
Leider gibt es keinen fertigen Befehl dafür, aber wir können einen wie folgt erstellen:
(defun name-of-the-file ()
"Gets the name of the file the current buffer is based on."
(interactive)
(insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))
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.
Was ist die Standardschlüsselbindung?
Es gibt keine, aber Sie können eine passende auswählen und sie wie folgt zuweisen:
(global-set-key (kbd "C-c f") 'name-of-the-file)
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:
name-of-the-file: Wrong type argument: char-or-string-p, nil
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.
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.