Frage

Ich brauche den vollständigen Pfad der Datei zu erhalten, dass ich mit Emacs bin die Bearbeitung.

  • Gibt es eine Funktion für das?
  • Wenn nicht, was die elisp Funktion bekommen, dass sein würde?
  • Wie kann ich das Ergebnis (Pfadname) kopieren in die Zwischenablage, so dass ich sie wiederverwenden können?

Ich verwende Mac OS X und Aqumacs.

(setq filepath (get-fullpath-current-file)) ???
(copy-to-clipboard 'filepath) ???

ADDED

(defun show-file-name ()
  "Show the full path file name in the minibuffer."
  (interactive)
  (message (buffer-file-name))
  (kill-new (file-truename buffer-file-name))
)
(global-set-key "\C-cz" 'show-file-name)

Die Kombination der beiden Antworten, die ich bekam, konnte ich bekommen, was ich will. Danke für die Antworten. Und noch ein paar Fragen.

  • Was ist für (Datei-truename)?
  • Kann ich die Pfadnamen im System kopieren (O) 's Zwischenablage, nicht der Kill-Ring so, dass ich die Informationen mit den anderen Anwendungen verwenden kann?
War es hilfreich?

Lösung

Es ist die eingebaute Funktion buffer-file-name, dass Sie den vollständigen Pfad der Datei gibt.

Das Beste, was zu tun ist, Ihre Emacs-Fenster müssen immer Ihre System-Namen zeigen und der vollständige Pfad des Puffer sind Sie gerade bearbeiten:

(setq frame-title-format
      (list (format "%s %%S: %%j " (system-name))
        '(buffer-file-name "%f" (dired-directory dired-directory "%b"))))

Sie können auch etwas tun:

(defun show-file-name ()
  "Show the full path file name in the minibuffer."
  (interactive)
  (message (buffer-file-name)))

(global-set-key [C-f1] 'show-file-name) ; Or any other key you want

Andere Tipps

Um von Jérôme Radix Antwort zu leihen, wenn Sie nur schnell den Dateipfad des aktuellen Puffers wollen, um zu sehen, Sie M-: buffer-file-name tun können.

Mein Trick ist, ein C-x C-f zu tun, wie eine Datei zu öffnen, es wil die minibuff mit dem aktuellen Dateipfad prefill, C-g zu beenden. Schneller als M-: buffer-file-name aber weit weit hässliche als andere Methoden.

Die direkte Umsetzung von dem, was Sie wollen, ist:

(defun copy-full-path-to-kill-ring ()
  "copy buffer's full path to kill ring"
  (interactive)
  (when buffer-file-name
    (kill-new (file-truename buffer-file-name))))

sagte, finde ich es unglaublich nützlich Lage sein, den vollständigen Pfad zu bekommen, was in dem Minipuffer ist, und das ist, was ich benutze:

(define-key minibuffer-local-completion-map "\C-r" 'resolve-sym-link)
(defun resolve-sym-link ()
  "Try to resolve symbolic links into true paths."
  (interactive)
  (beginning-of-line)
  (let* ((file (buffer-substring (point)
                                 (save-excursion (end-of-line) (point))))
         (file-dir (file-name-directory file))
         (file-true-dir (file-truename file-dir))
         (file-name (file-name-nondirectory file)))
    (delete-region (point) (save-excursion (end-of-line) (point)))
    (insert (concat file-true-dir file-name))))

Und dann, wenn ich es in die Zwischenablage will, muss ich töten nur die Linie ( C-C-k ). Aber wir können die truename in die Zwischenablage in dem obigen Befehl leicht zu kopieren, nur die letzte Zeile ändern zu sein:

(insert (kill-new (concat file-true-dir file-name)))))

Der neue Teil ist der Aufruf 'kill-new, die die Zeichenfolge im Kill-Ring bringt.

Keine Notwendigkeit für zusätzliche Funktion, nur

M-! pwd

Ich habe den folgenden Code bereits für eine lange Zeit. Er kopiert der vollständige Dateipfad zu dem Kill-Ring, wenn ich mit der mittleren Maustaste auf den Puffernamen in der Mode-Linie drücken. Er kopiert nur die Puffer-Namen den Kill-Ring, wenn ich Shift-Maus-2 auf dem Puffer-Namen in der Mode-Linie drücken.

(defun copy-buffer-file-name (event &optional bufName)
  "Copy buffer file name to kill ring.
If no file is associated with buffer just get buffer name.
"
  (interactive "eP")
  (save-selected-window
    (message "bufName: %S" bufName)
    (select-window (posn-window (event-start event)))
    (let ((name (or (unless bufName (buffer-file-name)) (buffer-name))))
      (message "Saved file name \"%s\" in killring." name)
      (kill-new name)
      name)))

(define-key mode-line-buffer-identification-keymap [mode-line mouse-2] 'copy-buffer-file-name)
(define-key mode-line-buffer-identification-keymap [mode-line S-mouse-2] '(lambda (e) (interactive "e") (copy-buffer-file-name e 't)))

C-x C-d, auch über M-x list-directory aufrufbar, zeigen Sie das Verzeichnis für die aktuelle Datei, und Sie nur die „Enter“ Taste drücken müssen den Minipuffer zu löschen. Weitere Informationen finden Sie hier .

Kann ich kopieren Sie die Pfadnamen-System (OS) 's Zwischenablage, nicht der Kill-Ring so, dass ich die Informationen mit den anderen Anwendungen verwenden kann?

Sie können, wenn Sie berappen, um so etwas wie xclip (Linux), pbcopy (Mac), putclip (Cygwin).

Ich persönlich Wrapper-Skripten c und p für die Kopie verwenden und jeweils einfügen, die erste Lesung von der Standardeingabe, letztere Schreiben an der Standardausgabe. Auf diese Weise funktioniert dies auf alle meine Entwicklungsplattformen:

(shell-command (format "echo '%s' | c" buffer-file-name))

Das finde ich zuverlässiger und konfigurierbar als die Emacs-Zwischenablage-Unterstützung. Zum Beispiel meiner c Befehl kopiert die Eingabe in alle 3 Zwischenböden auf Linux (primär, sekundär, Zwischenablage), so dass ich mit beide Strg-V oder Mittelklick einfügen kann.

C-x C-b zeigt eine Liste von Puffern und der Dateipfad für jeden Puffer, wo anwendbar.

C-u C-x C-b Listen Puffer besuchen zur Zeit Dateien.

Der einfachste Weg, und wäre

(buffer-name)<(C-x)(C-e)> for the file name to appear in the echo area

(buffer-name)<(C-u)(C-x)(C-e)> would print the location <here>

Ausleihe von Trey Jackson Ich kam mit dieser:

(defun buffer-kill-path ()
  "copy buffer's full path to kill ring"
  (interactive)
  (kill-new (buffer-file-name)))

Sie finden weitere Informationen finden Sie auf Website

copy-buffer-file-name-as-kill von [0] tut genau das, was Sie brauchen, denke ich. Es hat auch die Möglichkeit, nur Verzeichnisnamen zu kopieren, oder einfach nur Dateinamen.

[0] http://www.emacswiki.org/emacs/download /buffer-extension.el

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top