Wie soll ich meine aktuelle Datei in Vim umbenennen?
Zum Beispiel:
- Ich bearbeite
person.html_erb_spec.rb
- Ich möchte es umbenannt in
person.haml_spec.rb
- Ich möchte weiter bearbeiten
person.haml_spec.rb
Wie würde ich das elegant machen?
Es gibt ein kleines Plugin , mit dem Sie dies tun können.
Program Files (x86)
. Jedes Mal, wenn mit diesem Verzeichnis gearbeitet werden muss, muss es in Anführungszeichen gesetzt werden. Welches ist ähm, viel.Der Befehl wird aufgerufen
:saveas
, aber leider wird Ihre alte Datei nicht gelöscht. Sie müssen dies manuell tun. siehe:help saveas
für weitere Informationen.BEARBEITEN:
Die meisten vim-Installationen verfügen über einen integrierten Datei-Explorer, den Sie für solche Vorgänge verwenden können. Versuchen Sie es
:Explore
im Befehlsmodus (ich würde das tatsächlich einer Funktionstaste zuordnen, es ist sehr praktisch). Sie können beispielsweise Dateien mit umbenennenR
oder mit löschenD
. Durch Drücken<F1>
des Explorers erhalten Sie jedoch einen besseren Überblick.quelle
Wenn Sie git verwenden und bereits das Plugin fugitive.vim des tpope haben, dann einfach:
Dieser Wille:
Wenn Ihre Datei noch nicht zu einem Git-Repo hinzugefügt wurde, fügen Sie sie zuerst hinzu:
quelle
:Gmove
Erfordert den relativen Pfad für den neuen Dateinamen. Eine:Gmove <ctrl-r>%
gute Möglichkeit, dies zu tun, besteht darin, den aktuellen Pfad / Dateinamen anzugeben.Ich mache es mit dem NERDTree Plugin:
dann drücken m
Zum Umbenennen können Sie den
(m)ove the current node
Dateinamen auswählen und ändern. Es gibt auch Optionen wie Löschen, Kopieren, Verschieben usw.quelle
:w newname
-, um eine Kopie zu erstellen.:e#
.:!rm oldname
.Unter Windows ändert sich der optionale dritte Schritt ein wenig:
:!del oldname
.quelle
:f newname
2) ihn zu speichern:w
3) (optional)!rm oldname
. Der Vorteil ist, dass Ihr Rückgängig-Verlauf erhalten bleibt.:saveas
ist in dieser Hinsicht besser, @rampion - und macht das, was @kynan geschrieben hat.Wenn die Datei bereits gespeichert ist:
Beispiel:
Berechtigungsanforderungen:
Speichern als:
Für Windows Unverified
quelle
Ich würde es
:Rename
von tpopes Eunuchen empfehlen .Es enthält auch eine Reihe anderer praktischer Befehle.
Der Befehl Umbenennen ist derzeit wie folgt definiert (überprüfen Sie das Repo auf Aktualisierungen!):
quelle
Sie können dies auch mit netrw tun
Der Explore-Befehl öffnet netrw im Verzeichnis der geöffneten Datei
Bewegen Sie den Mauszeiger über die Datei, die Sie umbenennen möchten:
Geben Sie den neuen Namen ein, drücken Sie die Eingabetaste und dann y.
quelle
Kurz, sicher, ohne Plugin:
control+ R, #Wird sofort zu einer erweitern alternative-Datei (zuvor bearbeiteten Pfad im aktuellen Fenster) vor dem Pressen Enter. Auf diese Weise können wir überprüfen, was genau gelöscht werden soll. Die Verwendung von Pipe
|
in einem solchen Fall ist nicht sicher, da bei einemsav
Ausfall aus irgendeinem Grund#
immer noch auf einen anderen Ort (oder auf nichts) verwiesen wird. Das bedeutet!rm #
oderdelete(expand(#))
kann eine völlig andere Datei löschen! Machen Sie es also sorgfältig von Hand oder verwenden Sie ein gutes Skript (sie werden hier in vielen Antworten erwähnt).Lehrreich
... oder versuchen Sie selbst eine Funktion / einen Befehl / ein Skript zu erstellen. Beginnen Sie mit etw einfach wie:
Nach dem erneuten Laden von vimrc geben Sie einfach ein
:Rename new_filename
. Was ist das Problem mit diesem Befehl?Sicherheitstest 1: Was macht
:Rename
ohne Argument?Ja, es löscht die in '#' versteckte Datei!
Lösung: Sie können zB verwenden. Bedingungen oder
try
Aussage wie diese:Sicherheitstest 1:
:Rename
(ohne Argument) gibt einen Fehler aus:Sicherheitstest 2: Was ist, wenn der Name mit dem vorherigen identisch ist?
Sicherheitstest 3: Was ist, wenn sich die Datei an einem anderen Speicherort als Ihrem tatsächlichen befindet?
Repariere es selbst. Zur besseren Lesbarkeit können Sie es folgendermaßen schreiben:
Anmerkungen
!rm #
ist besser als!rm old_name
-> Sie müssen sich nicht an den alten Namen erinnern!rm <C-R>#
ist besser als!rm #
wenn man es von Hand macht -> Sie werden sehen, was Sie tatsächlich entfernen (Sicherheitsgrund)!rm
ist in der Regel nicht sehr sicher ...mv
zu einem Müllplatz ist bessercall delete(expand('#'))
ist besser als der Shell-Befehl (OS-unabhängig), aber länger zu tippen und control+ nicht verwendbarRtry | code1 | code2 | tryend
-> Wenn während Code1 ein Fehler auftritt, führen Sie Code2 nicht aus:sav
(oder:saveas
) entspricht:f new_name | w
- siehe file_f - und behält den Rückgängig-Verlauf beiexpand('%:p')
gibt den gesamten Pfad Ihres Speicherorts (%
) oder den Speicherort der alternativen Datei (#
) anquelle
quelle
call delete(expand('#'))
In Gary Bernhardts .vimrc gibt es eine Funktion , die dies erledigt.
quelle
Register
%
enthält den Namen der aktuellen Datei.'%:h'
Zeigt das Verzeichnis 'head' an, das die aktuelle Datei enthält, z. B.:%:h
Gibt zurück,/abc/def
wenn der vollständige Pfad Ihrer Datei lautetabc/dev/my.txt
quelle
Wie wäre es damit (verbessert durch Jakes Vorschlag):
quelle
:exe "!mv % newfilename" | e newfilename
Vim hat zwar eine
rename
Funktion, behält aber leider nicht die Geschichte bei.Der einfachste betriebssystemunabhängige Weg, eine Datei umzubenennen, ohne den Verlauf zu verlieren, ist:
expand('#:p')
Gibt den vollständigen Pfad der älteren Datei zurück.Verwenden
:bd #
Sie diese Option, wenn Sie auch die ältere Datei aus der Pufferliste löschen möchten.Oder erstellen Sie ein Plugin
Wenn Sie die Datei mit einem Schnellbefehl umbenennen möchten, fügen Sie unter ~ / .vim / plugin eine neue Datei mit folgendem Inhalt hinzu:
Mit dem Befehl
Rename
können Sie eine Datei schnell umbenennen.quelle
Es gibt ein deutlich größeres Plugin namens vim- eunuch von Tim Pope, das eine Umbenennungsfunktion sowie einige andere Extras enthält (Löschen, Suchen, Speichern aller, chmod, sudo edit, ...).
So benennen Sie eine Datei in vim-eunuch um:
:Move filename.ext
Im Vergleich zu rename.vim:
:rename[!] filename.ext
Spart ein paar Tastenanschläge :)
quelle
Um vorhandene Dateien ohne Verwendung von Plugins umzubenennen, sollten Sie den Befehl verwenden
Mit diesem Befehl können Sie Dateien im Verzeichnis durchsuchen, löschen oder umbenennen. Dann sollten Sie im Explorer zu der erforderlichen Datei navigieren und dann den
R
Befehl type eingeben , mit dem Sie den Dateinamen umbenennen könnenquelle
Ich weiß nicht, ob dies die "einfachste" Methode ist, aber vorausgesetzt, Sie haben Ihre Datei bereits gespeichert (: w), würde ich die Shell (: sh) aufrufen und ein einfaches cp foo foo.bak ausführen, um zum Editor zurückzukehren Verwenden Sie Strg-D / Beenden. Nützliche Liste der vi-Editor-Befehle unter diesem Link
quelle
Sie können auch Folgendes verwenden: f gefolgt von: w
quelle
Dieses kleine Skript ist nicht perfekt (der zusätzliche Wagenrücklauf, den Sie drücken müssen), aber es erledigt den Job.
quelle
Eine andere Möglichkeit besteht darin, nur netrw zu verwenden, das ein nativer Bestandteil von vim ist.
Dann gibt es Optionen zum Löschen, Umbenennen usw.
Hier ist eine Keymap zum Öffnen von netrw für den Ordner der Datei, die Sie bearbeiten:
quelle
:sav newfile | !rm #
Beachten Sie, dass die alte Datei nicht aus der Pufferliste entfernt wird. Wenn Ihnen das wichtig ist, können Sie stattdessen Folgendes verwenden:
:sav newfile | bd# | !rm #
quelle