Ich muss den vollständigen Pfad der Datei abrufen, die ich mit Emacs bearbeite.
- Gibt es dafür eine Funktion?
- Wenn nicht, was wäre die Elisp-Funktion, um das zu bekommen?
- Wie kann ich das Ergebnis (Pfadname) in eine Zwischenablage kopieren, damit ich es wiederverwenden kann?
Ich benutze Mac OS X und Aqumacs.
(setq filepath (get-fullpath-current-file)) ???
(copy-to-clipboard 'filepath) ???
HINZUGEFÜGT
(defun show-file-name () "Zeigen Sie den vollständigen Pfaddateinamen im Minibuffer an." (interaktiv) (Nachricht (Pufferdateiname)) (kill-new (Datei-Truename Puffer-Dateiname)) ) (global-set-key "\ C-cz" 'show-file-name)
Wenn ich die beiden Antworten kombiniere, kann ich bekommen, was ich will. Danke für die Antworten. Und noch ein paar Fragen.
- Wofür ist (Dateiname)?
- Kann ich den Pfadnamen in die Zwischenablage des Systems (OS) kopieren, nicht in den Kill Ring, damit ich die Informationen mit den anderen Apps verwenden kann?
buffer-file-name
ist eine VariableM-x
?funcall
Funktionen verwenden müssen, um eine Funktion aufzurufen, die als Wert einer Variablen gespeichert istfoo
, da Sie bei(foo)
Verwendung den Funktionsbereich vonfoo
und nicht den Wertbereich verwenden würden.Wenn Sie nur den Dateipfad des aktuellen Puffers anzeigen möchten, können Sie dies tun, um die Antwort von Jérôme Radix auszuleihen
M-: buffer-file-name
.Alternativ können Sie
(buffer-file-name)
den Puffer irgendwo eingeben undC-x C-e
in der schließenden Klammer ausführen (dies funktioniert in jedem Modus, nicht nur im Lisp-Modus).quelle
buffer-file-name
als eine Funktion, aber es erscheint nicht inM-x
, sondern erscheint inM-:
wieemacs eval
es ich den Befehl ausführen kann, dank Ihrer Antwort :)M-x
nur interaktive Funktionen aus, währendM-:
alle Elisp-Funktionen ausgeführt werden.Mein Trick besteht darin
C-x C-f
, eine Datei zu öffnen, um den Minibuff mit dem aktuellen Dateipfad zu füllen undC-g
zu beenden. Schneller alsM-: buffer-file-name
aber weitaus hässlicher als alle anderen Methoden.quelle
Die direkte Umsetzung Ihrer Wünsche ist:
Trotzdem finde ich es unglaublich nützlich, den vollständigen Pfad des Minibuffers abrufen zu können, und das verwende ich:
Und wenn ich es dann in der Zwischenablage haben möchte, töte ich einfach die Zeile ( C-a C-k). Aber wir könnten den Truenamen im obigen Befehl leicht in die Zwischenablage kopieren. Ändern Sie einfach die letzte Zeile in:
Der neue Teil ist der Aufruf, bei
'kill-new
dem die Zeichenfolge in den Kill-Ring eingefügt wird.quelle
Keine zusätzliche Funktion erforderlich, nur
quelle
C-x C-f
, ausführenM-! pwd
,M-x cd
ein anderes Verzeichnis auswählen und dannM-! pwd
erneut ausführen .Ich habe den folgenden Code bereits seit langer Zeit in Gebrauch. Es kopiert den vollständigen Dateipfad zum Kill Ring, wenn ich die mittlere Maustaste auf den Puffernamen in der Moduszeile drücke. Es kopiert nur den Puffernamen in den Kill-Ring, wenn ich Shift-Mouse-2 auf den Puffernamen in der Moduszeile drücke.
quelle
C-x C-d
, auch aufrufbar überM-x list-directory
, zeigt Ihnen das Verzeichnis für Ihre aktuelle Datei an, und Sie müssen nur die Eingabetaste drücken, um den Minibuffer zu löschen. Weitere Details finden Sie hier .quelle
C-x C-b
zeigt eine Liste der Puffer und gegebenenfalls den Dateipfad für jeden Puffer an.quelle
C-u C-x C-b
listet Puffer auf, die gerade Dateien besuchen.quelle
Sie können, wenn Sie zu etwas wie xclip (Linux), pbcopy (Mac), putclip (Cygwin) berappen.
Ich persönlich verwende Wrapper-Skripte
c
undp
zum Kopieren bzw. Einfügen, wobei die erste Lesung von der Standardeingabe erfolgt, die letztere in die Standardausgabe. Auf diese Weise funktioniert dies auf allen meinen Entwicklungsplattformen:Ich finde das zuverlässiger und konfigurierbarer als die Unterstützung der Emacs-Zwischenablage. Zum Beispiel
c
kopiert mein Befehl die Eingabe in alle 3 Zwischenablagen unter Linux (primär, sekundär, Zwischenablage), sodass ich sie entweder mit Strg-V oder mit der mittleren Maustaste einfügen kann.quelle
date | xclip
undxclip file
beide funktionieren wie angekündigt (Speichern des Datums oder des Inhalts der Datei in der Primärdatei), wenn sie in die Shell eingegeben werden. Aber wenn ich einen dieser Befehle nach M-! in emacs (und hit return) passiert nichts; Der Cursor bleibt im Minibuffer, als würde er mehr Eingaben erwarten. und wenn ich unterbreche, um die Kontrolle wiederzugewinnen, wurde nichts in der Primärdatenbank gespeichert.(shell-command (format "echo '%s' | xsel -i" buffer-file-name))
- und wenn sie in einen interaktiven Befehl umgewandelt wird (wie in der am besten bewerteten Antwort von @JeromeRadix oben vorgeschlagen), ist dies ein GROSSER GEWINN! Vielen Dank!Der einfachste Weg und wäre
In Anlehnung an Trey Jackson habe ich mir Folgendes ausgedacht:
Weitere Informationen finden Sie vor Ort
quelle
copy-buffer-file-name-as-kill
von [0] macht genau das, was du brauchst, denke ich. Es hat auch die Option, nur den Verzeichnisnamen oder nur den Dateinamen zu kopieren.[0] http://www.emacswiki.org/emacs/download/buffer-extension.el
quelle