Frage

Wie soll ich meine aktuelle Datei in Vim umbenennen?

Zum Beispiel:

  • Ich bin der Bearbeitung person.html_erb_spec.rb
  • Ich möchte es person.haml_spec.rb umbenannt
  • Ich möchte Bearbeitung person.haml_spec.rb
  • , um fortzufahren

Wie würde ich mich über das Tun dies, elegant?

War es hilfreich?

Andere Tipps

Der Befehl wird :saveas genannt, aber leider wird es nicht Ihre alte Datei löschen, werden Sie dies manuell tun. finden Sie unter :help saveas für weitere Informationen.

EDIT:

Die meisten vim Installationen verfügen über eine integrierte Datei-Explorer, mit dem Sie für solche Operationen verwenden können. Versuchen Sie :Explore im Befehlsmodus (ich würde Karte eigentlich, dass auf eine Funktionstaste, dann ist es sehr praktisch). Sie können Dateien mit R umbenennen oder mit D löschen, zum Beispiel. Aber drücken <F1> im Explorer gibt Ihnen einen besseren Überblick.

Wenn Sie git verwenden und schon haben die tpope Plugin fugitive.vim dann einfach:

:Gmove newname

Dies wird:

  1. Benennen Sie die Datei auf der Festplatte.
  2. Benennen Sie die Datei in git Repo.
  3. Laden Sie die Datei in den aktuellen Puffer.
  4. Preserve rückgängig machen Geschichte.

Wenn die Datei noch nicht zu einem git Repo hinzugefügt wurde dann zunächst hinzufügen:

:Gwrite
  • Schreiben Sie die Datei während der Bearbeitung - :w newname - eine Kopie erstellen
  • .
  • Starten Sie die neue Kopie der Bearbeitung -. :e#
  • (Optional) Entfernen Sie die alte Kopie -. :!rm oldname

Unter Windows ist die optionale dritte Schritt ändert sich ein wenig:

  • (Optional) entfernen alte Windows-Kopie -. :!del oldname

Ich mache es mit NERDTree Plugin:

:NERDTreeFind

drücken Sie die m

So benennen Sie (m)ove the current node wählen und Dateinamen ändern. Auch gibt es Optionen wie Löschen, Kopieren, Verschieben, etc ...

Wenn die Datei bereits gespeichert:

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

Beispiel:

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

Permission Anforderungen:

:!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 Ungeprüft

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

würde ich :Rename von tpope des empfehlen Eunuch für diese.

Es enthält auch eine Reihe von anderen praktisch Befehlen.

Der Befehl Umbenennen ist definiert als darin zur Zeit folgt (überprüfen Sie die repo für alle Updates!):

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

Short, sicher, ohne Plugin:

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

Kontrolle + R , # wird ein sofort erweitern alternativen-Datei (Pfad im aktuellen Fenster zuvor bearbeiteten) vor dem Drücken Enter . Das ermöglicht es uns, zu überprüfen, was genau gehen wir zu löschen. Unter Verwendung von Rohr | in einem solchen Fall ist nicht sicher, denn wenn sav aus irgendeinem Grund ausfällt, # noch an einen anderen Ort verweisen (oder nichts). Das bedeutet !rm # oder delete(expand(#)) ganz andere Datei löschen kann! So tut es sorgfältig von Hand oder verwenden Sie gutes Drehbuch (sie sind in vielen Antworten hier erwähnt).

Ausbildung

... oder versuchen, eine Funktion / Befehl / script selbst bauen. Starten von etw einfach wie:

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

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

Sicherheitstest 1: Was does:Rename ohne Argument

Ja, es löscht Datei in '#' versteckt!

Lösung: Sie können beispielsweise verwendet werden. Bedingungen oder try Anweisung wie folgt aus:

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

Sicherheitstest 1: :Rename (ohne Argument) wird einen Fehler werfen:

  

E471: Argument erforderlich

Sicherheitstest 2: Was passiert, wenn der Name der gleiche wie vorherige sein?

Sicherheits Test 3: Was passiert, wenn sich die Datei in anderen Ort als Ihr tatsächliches sein?

Fix it yourself. Zur besseren Lesbarkeit Sie es auf diese Weise schreiben können:

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

Notizen

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

  • !rm <C-R># ist besser als !rm #, wenn es von Hand zu tun -> werden Sie sehen, was Sie tatsächlich entfernen (aus Sicherheitsgründen)

  • !rm ist in der Regel nicht sehr sicher ... mv zu einem Müll Lage ist besser

  • call delete(expand('#')) ist besser als Shell-Befehl (OS unabhängig), sondern mehr zu geben und nicht zu verwenden Kontrolle + R

  • try | code1 | code2 | tryend -> wenn Fehler während code1 auftritt, laufen nicht code2

  • :sav (oder :saveas) entspricht :f new_name | w - siehe file_f - und Konserven rückgängig machen Geschichte

  • expand('%:p') gibt ganzen Weg von Ihrem Standort (%) oder dem Ort der alternativen Datei (#)

Sie können es auch tun mit netrw

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

:E

Bewegen Sie den Cursor über die Datei möchten Sie umbenennen:

R

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

sav person.haml_spec.rb | call delete(expand('#'))

Es gibt eine Funktion in Gary Bernhardts .vimrc , die diese verarbeitet.

function! RenameFile()
let old_name = expand('%')
let new_name = input('New file name: ', expand('%'), 'file')
if new_name != '' && new_name != old_name
    exec ':saveas ' . new_name
    exec ':silent !rm ' . old_name
    redraw!
endif
endfunction
map <leader>n :call RenameFile()<cr>

Wie wäre es damit (verbesserte sich um Jakes Vorschlag):

:exe "!mv % newfilename" | e newfilename

Vim hat eine rename Funktion haben, aber leider ist es nicht die Geschichte bewahren.

Die einfachste OS Agnostiker Möglichkeit, eine Datei, ohne dabei die Geschichte umzubenennen wäre:

:saveas new_file_name
:call delete(expand('#:p'))

expand('#:p') gibt den vollständigen Pfad der älteren Datei.

Verwenden :bd #, wenn Sie wollen auch die ältere Datei aus dem Pufferliste löschen.

Oder erstellen Sie ein Plugin

Wenn Sie eine schnelle Befehl verwenden, um die Datei umzubenennen, fügen Sie eine neue Datei unter ~ / .vim / Plugin mit dem folgenden Inhalt:

function! s:rename_file(new_file_path)
  execute 'saveas ' . a:new_file_path
  call delete(expand('#:p'))
  bd #
endfunction

command! -nargs=1 -complete=file Rename call <SID>rename_file(<f-args>)

Der Befehl Rename wird Ihnen helfen, schnell eine Datei zu umbenennen.

Es gibt eine sightly größere Plugin vim-Eunuchen von Tim Pope genannt, die eine Umbenennungsfunktion enthält als auch einige andere Leckereien (löschen, finden, speichern Sie alle, chmod, sudo bearbeiten, ...).

Um eine Datei in vim-Eunuchen umbenennen:

:Move filename.ext

Im Vergleich zu rename.vim:

:rename[!] filename.ext

Speichert ein paar Tastenanschläge:)

Sie können auch verwendet werden: f gefolgt von: w

Ich weiß nicht, ob dies die „einfachste“ Methode, aber vorausgesetzt, Sie bereits Ihre Datei gespeichert (: w) ich die Shell aufrufen würde (sh) und ein einfaches cp foo foo.bak tun gehen zurück zum Editor verwendet Strg-D / Exit. Nützliche Liste der vi-Editor-Befehle auf diesen Link

:!mv % %:h/new_name

Register % enthält den Namen des aktuellen file.'%:h'shows das Verzeichnis ‚Kopf‘ die aktuelle Datei enthält, z.B .: %:hreturns /abc/def wenn Ihre Datei vollständigen Pfad ist abc/dev/my.txt

Dieses kleine Skript nicht perfekt ist (der zusätzliche Wagenrücklauf Sie drücken müssen), aber es bekommen ist die Arbeit erledigt.

function Rename()
  let new_file_name = input('New filename: ')
  let full_path_current_file = expand("%:p")
  let new_full_path = expand("%:p:h")."/".new_file_name
  bd    
  execute "!mv ".full_path_current_file." ".new_full_path
  execute "e ".new_full_path
endfunction                                                                                                                                                                                                                                 

command! Rename :call Rename()
nmap RN :Rename<CR>

Eine andere Möglichkeit ist nur netrw zu verwenden, das ist ein nativer Teil vim.

:e path/to/whatever/folder/

Dann gibt es Optionen zu löschen, umbenennen, etc.

Hier ist ein keymap in den Ordner der Datei zu öffnen netrw Sie bearbeiten:

map <leader>e :e <C-R>=expand("%:p:h") . '/'<CR><CR>

:sav newfile | !rm #

Beachten Sie, dass es nicht die alte Datei aus dem Pufferliste nicht entfernt. Wenn das für Sie wichtig ist, können Sie den folgenden verwenden, anstatt:

:sav newfile | bd# | !rm #

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