Jak mogę zmienić nazwę edytowanego pliku?

38

Czy można zmienić nazwę pliku, który edytuję z poziomu Vima? Obecnie to, co robię, to zamknij Vima, zmień nazwę pliku i ponownie otwórz Vima.

Thameera
źródło
Interesuje mnie to w neovim
Miguel de Val-Borro

Odpowiedzi:

35

Możesz zapisać plik pod inną nazwą, używając :w. Ale ta operacja nie usunie starego pliku, a „stary” plik pozostanie w buforze, więc wszelkie zmiany zostaną zastosowane w „starym” pliku.

:saveaszapisuje nowy plik i otwiera go w nowym buforze. Ale to nie usuwa starego pliku.

Używam tpope / vim-eneuch do :Moveplików.

: Przenieś: Zmień nazwę bufora i pliku na dysku jednocześnie.

OrangeTux
źródło
Jedną wadą :wlub :saveasjest to, że utraci on uprawnienia do wykonywania, jeśli edytujesz skrypt. netrwZmień nazwę zachowa uprawnienia.
wisbucky
11

Możesz przejść do Netrw i zmienić tam nazwę pliku.

Jeśli edytowany plik znajduje się w bieżącym katalogu, wykonaj następujące czynności:

:edit .

Przejdź do pliku, naciśnij Ri zmień nazwę. Naciśnij, Enteraby edytować plik.

Jest jednak zastrzeżenie: oryginalny bufor pozostaje na liście buforów. Jeśli przełączysz się na to, będzie puste.

Jeśli edytowany plik znajduje się w innym katalogu, możesz przejść do katalogu pliku za pomocą:

:cd %:p:h

Jeśli nie chcesz zmieniać katalogu dla całej sesji Vima, ale tylko dla bieżącego bufora, możesz zamiast tego:

:lcd %:p:h
Przestań krzywdzić Monikę
źródło
2
:edit %:p:hWydaje się, że pisanie na wprost też działa.
Mladen Jablanović
:Eotworzy również netrw
wisbucky
6

Byłem przy użyciu wtyczki Rename2 o tym od lat. Zmienia nazwę zarówno bieżącego bufora, jak i pliku na dysku:

:Rename {newname}

EDYCJA: Znalazłem ten .vimrcplik na 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
źródło
3

Najlepszym sposobem jest użycie :Move, jak powiedział OrangTux. Dla kompletności możesz także wykonywać polecenia terminalowe w edytorach vi za pomocą bang ( !) w trybie poleceń.

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

Jednak ta metoda nie usuwa starego bufora z listy buforów.

Ankieta Cody
źródło