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.
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.
Odpowiedzi:
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.
:saveas
zapisuje nowy plik i otwiera go w nowym buforze. Ale to nie usuwa starego pliku.
Używam tpope / vim-eneuch do :Move
plików.
: Przenieś: Zmień nazwę bufora i pliku na dysku jednocześnie.
:w
lub :saveas
jest to, że utraci on uprawnienia do wykonywania, jeśli edytujesz skrypt. netrw
Zmień nazwę zachowa uprawnienia.
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
:edit %:p:h
Wydaje się, że pisanie na wprost też działa.
:E
otworzy również netrw
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 .vimrc
plik 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>
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.