Wie kann ich die bearbeitete Datei umbenennen?

38

Ist es möglich, die Datei, die ich bearbeite, in Vim umzubenennen? Derzeit beende ich Vim, benenne die Datei um und öffne sie erneut.

Thameera
quelle
Ich bin daran interessiert, dies in Neovim zu tun
Miguel de Val-Borro

Antworten:

35

Sie können die Datei mit unter einem anderen Namen speichern :w. Durch diesen Vorgang wird die alte Datei jedoch nicht entfernt, und die "alte" Datei bleibt in Ihrem Puffer, sodass alle Änderungen auf Ihre "alte" Datei angewendet werden.

:saveasspeichert Ihre neue Datei und öffnet sie in einem neuen Puffer. Die alte Datei wird jedoch nicht gelöscht.

Ich benutze tpope / vim-eneuch für :MoveDateien.

: Verschieben: Benennen Sie einen Puffer und die Datei auf der Festplatte gleichzeitig um.

OrangeTux
quelle
Ein Nachteil von :woder :saveasist, dass die Ausführungsberechtigung verloren geht, wenn Sie ein Skript bearbeitet haben. netrwUmbenennen behält die Berechtigungen bei.
wisbucky
11

Sie können zu Netrw wechseln und die Datei dort umbenennen.

Befindet sich die von Ihnen bearbeitete Datei im aktuellen Verzeichnis, gehen Sie wie folgt vor:

:edit .

Navigieren Sie zu der Datei, drücken Sie Rund ändern Sie den Namen. Drücken Sie Enter, um die Datei zu bearbeiten.

Es gibt jedoch eine Einschränkung: Der ursprüngliche Puffer verbleibt in der Pufferliste. Wenn Sie dorthin wechseln, ist es leer.

Wenn sich die Datei, die Sie bearbeiten, in einem anderen Verzeichnis befindet, können Sie mit den folgenden Schritten in das Dateiverzeichnis wechseln:

:cd %:p:h

Wenn Sie das Verzeichnis nicht für die gesamte Vim-Sitzung ändern möchten, sondern nur für den aktuellen Puffer, können Sie stattdessen Folgendes tun:

:lcd %:p:h
Hör auf, Monica weiter zu schaden
quelle
2
Gerade zu tippen :edit %:p:hscheint auch zu funktionieren.
Mladen Jablanović
:Ewird auch geöffnet netrw
wisbucky
6

Ich benutze dafür seit Jahren das Rename2-Plugin . Es benennt sowohl den aktuellen Puffer als auch die Datei auf der Festplatte um:

:Rename {newname}

EDIT: Ich fand dies eine .vimrcDatei auf Github :

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>
craigp
quelle
3

Der beste Weg ist zu benutzen :Move, wie OrangTux sagte. Der Vollständigkeit halber können Sie Terminalbefehle in vi-Editoren auch mit einem bang ( !) im Befehlsmodus ausführen .

:!mv {current_file} {new_name}
:e {new_name}

Diese Methode entfernt jedoch nicht den alten Puffer aus Ihrer Pufferliste.

Cody Poll
quelle