470 Stimmen

Umbenennen der aktuellen Datei in Vim

Wie sollte ich meine aktuelle Datei in Vim umbenennen?

Zum Beispiel:

  • Ich bearbeite person.html_erb_spec.rb
  • Ich möchte, dass sie umbenannt wird in person.haml_spec.rb
  • Ich würde gerne weiter bearbeiten person.haml_spec.rb

Wie würde ich das auf elegante Weise tun?

57voto

Mesco Punkte 997

Kurz, sicher, ohne Plugin:

:sav new_name
:!rm <C-R>#  // or !del <C-R># for windows

control + R , # wird sich sofort zu einem Wechseldatei (zuvor bearbeiteter Pfad im aktuellen Fenster), bevor Sie Enter . So können wir überprüfen, was genau wir löschen wollen. Mit Pipe | ist in einem solchen Fall nicht sicher, denn wenn sav aus irgendeinem Grund ausfällt, # zeigt immer noch auf einen anderen Ort (oder ins Leere). Das bedeutet !rm # o delete(expand(#)) kann eine ganz andere Datei löschen! Machen Sie es also sorgfältig von Hand oder verwenden Sie ein gutes Skript (das in vielen Antworten hier erwähnt wird).

Bildung

...oder versuchen Sie selbst eine Funktion/Befehl/Skript zu erstellen. Beginnen Sie mit etwas Einfachem wie:

command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #

nach dem Neuladen von vimrc, geben Sie einfach :Rename new_filename . Was ist das Problem mit diesem Befehl?

Sicherheitstest 1: Was bedeutet :Rename ohne Argumente?

Ja, es löscht die in '#' versteckte Datei!

Lösung: Sie können z. B. Bedingungen oder try Aussage wie diese:

command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry

Sicherheitstest 1: :Rename (ohne Argument) wird einen Fehler auslösen:

E471: Argument erforderlich

Sicherheitstest 2: Was ist, wenn der Name derselbe wie der vorherige ist?

Sicherheitstest 3: Was ist, wenn sich die Datei an einem anderen Ort als dem tatsächlichen befindet?

Reparieren Sie es selbst. Zur besseren Lesbarkeit können Sie es so schreiben:

function! s:localscript_name(name):
  try
    execute 'saveas ' . a:name
    ...
  endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)

Hinweise

  • !rm # ist besser als !rm old_name -> Sie brauchen sich nicht an den alten Namen zu erinnern

  • !rm <C-R># ist besser als !rm # wenn man es von Hand macht -> sieht man, was man tatsächlich entfernt (Sicherheitsgründe)

  • !rm ist im Allgemeinen nicht sehr sicher... mv zu einem Müllplatz ist besser

  • call delete(expand('#')) ist besser als ein Shell-Befehl (unabhängig vom Betriebssystem), aber länger zu tippen und unmöglich zu benutzen control + R

  • try | code1 | code2 | tryend -> wenn bei Code1 ein Fehler auftritt, wird Code2 nicht ausgeführt

  • :sav (o :saveas ) ist gleichbedeutend mit :f new_name | w - siehe datei_f - und bewahrt die ungeschriebene Geschichte

  • expand('%:p') gibt den gesamten Pfad Ihres Standorts an ( % ) oder den Ort der alternativen Datei ( # )

38voto

Ben Punkte 2631

Sie können dies auch mit netrw tun

Der Befehl explore öffnet netrw im Verzeichnis der geöffneten Datei

:E

Bewegen Sie den Cursor auf die Datei, die Sie umbenennen möchten:

R

Geben Sie den neuen Namen ein, drücken Sie die Eingabetaste, und drücken Sie y.

37voto

Benjamin Punkte 1812

Wenn die Datei bereits gespeichert ist:

:!mv {file location} {new file location}
:e {new file location}

Ejemplo:

:!mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
:e src/test/scala/myNewFile.scala

Genehmigungsanforderungen:

:!sudo mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala

Speichern unter:

:!mv {file location} {save_as file location}
:w
:e {save_as file location} 

Für Windows Unverifiziert

:!move {file location} {new file location}
:e {new file location}

34voto

Gavin Gilmour Punkte 6581

Ich würde empfehlen :Rename von tpope's Eunuch für diese.

Außerdem enthält es eine Reihe weiterer praktischer Befehle.

Der Rename-Befehl ist darin derzeit wie folgt definiert (prüfen Sie das Repo auf eventuelle Aktualisierungen!):

command! -bar -nargs=1 -bang -complete=file Rename :
  \ let s:file = expand('%:p') |
  \ setlocal modified |
  \ keepalt saveas<bang> <args> |
  \ if s:file !=# expand('%:p') |
  \   call delete(s:file) |
  \ endif |
  \ unlet s:file

19voto

Zum Umbenennen einer bestehenden Datei ohne Verwendung von Plugins sollten Sie den Befehl

:Explore

Mit diesem Befehl können Sie Dateien im Verzeichnis erkunden, löschen oder umbenennen. R Befehl, mit dem Sie den Dateinamen umbenennen können

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X