Gibt es eine Möglichkeit, eine geöffnete Datei in Emacs umzubenennen? Während ich es mir ansehe? So etwas wie Speichern unter, aber das Original sollte verschwinden.
237
Probieren Sie diese Funktion aus Steve Yegges .emacs aus :
;; Quelle: http://steve.yegge.googlepages.com/my-dot-emacs-file (Defun Rename-Datei-und-Puffer (neuer Name) "Benennt sowohl den aktuellen Puffer als auch die Datei, die er besucht, in NEW-NAME um." (interaktiver "neuer Name:") (let ((name (puffername)) (Dateiname (Puffer-Dateiname)) (if (nicht Dateiname) (Meldung "Buffer '% s' besucht keine Datei!" Name) (if (get-buffer new-name) (Meldung "Ein Puffer mit dem Namen '% s' existiert bereits!" Neuer Name) (Prognose (Datei umbenennen Dateiname neuer Name 1) (Umbenennungspuffer neuer Name) (Set-Visited-File-Name New-Name) (set-buffer-modifiziert-p nil))))))
Schauen Sie sich diese Seite an, dort gibt es eine weitere wirklich nützliche Funktion, die "move-buffer-file" heißt.
(setq uniquify-buffer-name-style 'forward)
Bedeutung kompatibel , wenn Sie einen Puffer namensusers\index.html
(weil Sie bereits einen anderen Puffer für habenposts\index.html
) haben,(set-buffer-modified-p nil)
scheint unnötig. Wenn Sierename-file-and-buffer
einen geänderten Puffer aufrufen und dann versuchen, ihn zu beenden, würde er dies gerne tun, ohne Sie vor nicht gespeicherten Änderungen zu warnen.Ja, im
dired
Modus können Sie:C-x d
dired öffnenRET
um das Verzeichnis der aktuellen Datei auszuwählenC-x C-j
(dired-jump
zum Namen der aktuellen Datei in Dired)R
um die Datei (oderdired-do-rename
) umzubenennen .q
um zum (umbenannten) Dateipuffer zurückzukehrenDas Umbenennen entspricht einer Shell
mv
, aktualisiert jedoch auch alle geöffneten Puffer undmv
ändert im Gegensatz dazu nicht den Zugriff und die Änderungszeiten für die Datei im Dateisystem.quelle
C-x C-j
ist für mich nicht standardmäßig gebunden. DasM-x load-library RET dired-x RET
erste zu tun macht es gebunden.C-x C-j
ungebunden ist, ist nurM-x dired-jump
beim ersten Mal. Es wird automatisch geladendired-x
(was auch dazu führtC-x C-j
, dass es ab diesem Zeitpunkt definiert wird).Der Vollständigkeit halber, da einige Leute diese Seite besuchen und glauben, sie würden eine Antwort auf die Funktion "Speichern unter" von Emacs erhalten, ist dies Cx Cw für eine geöffnete Datei.
quelle
File > Save as...
Mein Favorit ist der von Magnars (von Emacs Rocks Screencasts Ruhm.)
Im Gegensatz zu den anderen Alternativen müssen Sie den Namen nicht von Grund auf neu eingeben - Sie erhalten den aktuellen Namen zum Ändern.
Vielen Dank an James Yang für eine korrekte Version.
quelle
Hier ist eine robustere Version von stevey.
quelle
Hier ist eine andere Version, die ziemlich robust und VC-fähig ist:
Sie können mehr darüber lesen Sie hier .
quelle
Wenn Sie Spacemacs verwenden, erhalten Sie dieses Verhalten kostenlos, da es eine Implementierung von
rename-current-buffer-file
(basierend auf Magnaren) enthält, an die standardmäßig gebunden istSPC-f-R
.https://github.com/syl20bnr/spacemacs/blob/bd7ef98e4c35fd87538dd2a81356cc83f5fd02f3/layers/%2Bdistributions/spacemacs-base/funcs.el#L294
quelle
Es gibt eine sehr einfache Möglichkeit, Sie drücken den Befehl Mx und geben dann vc-rename-file ein. Danach müssen Sie nur noch Ihre aktuelle Datei im Verzeichnis auswählen und dann den neuen Namen auswählen. Der Buff mit der geänderten Datei wird aktualisiert.
Quelle: https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Delete_002fRename.html
quelle
basierend auf der Magnar-Version, die ich wie folgt modifiziert habe, wurde der INIT-Dateinamen-Teil korrigiert:
quelle
Dies kann durch Kopieren erreicht werden. Shift + C in der Datei und Emacs werden Sie auffordern, einen Namen für den Pfad einschließlich des Dateinamens anzugeben. Geben Sie also einfach den neuen Namen ein und geben Sie ein ... natürlich müssen Sie den vorherigen löschen.
quelle