Jak zmienić nazwę mojego bieżącego pliku w Vimie?
Na przykład:
- Redaguję
person.html_erb_spec.rb
- Chciałbym zmienić jego nazwę na
person.haml_spec.rb
- Chciałbym kontynuować edycję
person.haml_spec.rb
Jak miałbym to robić elegancko?
Jest mała wtyczka, która pozwala ci to zrobić.
Program Files (x86)
. Za każdym razem, gdy ten katalog wymaga pracy, musi być zawinięty w cudzysłów. Co jest dużo.Komenda jest wywoływana
:saveas
, ale niestety nie usunie twojego starego pliku, musisz to zrobić ręcznie. zobacz:help saveas
więcej informacji.EDYTOWAĆ:
Większość instalacji vima ma zintegrowany eksplorator plików, którego można używać do takich operacji. Spróbuj
:Explore
w trybie poleceń (właściwie zamapowałbym to na klawisz funkcyjny, jest to bardzo przydatne). Możesz na przykład zmieniać nazwy plików za pomocąR
lub je usuwaćD
. Ale naciśnięcie<F1>
Eksploratora da ci lepszy przegląd.źródło
Jeśli używasz git i już wtyczki tpope za fugitive.vim po prostu:
Spowoduje to:
Jeśli plik nie został jeszcze dodany do repozytorium git, najpierw dodaj go:
źródło
:Gmove
wymaga ścieżki względnej dla nowej nazwy pliku. Dobrym sposobem na to jest wpisanie,:Gmove <ctrl-r>%
która dołącza bieżącą ścieżkę / nazwę pliku.Robię to za pomocą wtyczki NERDTree:
następnie naciśnij m
Aby zmienić nazwę, możesz wybrać
(m)ove the current node
i zmienić nazwę pliku. Dostępne są również opcje takie jak usuwanie, kopiowanie, przenoszenie itp.źródło
:w newname
-, aby utworzyć kopię.:e#
.:!rm oldname
.W systemie Windows opcjonalny trzeci krok nieco się zmienia:
:!del oldname
.źródło
:f newname
2) zapisz go:w
3) (opcjonalnie)!rm oldname
. Zaletą jest to, że historia cofania została zachowana.:saveas
jest lepszy pod tym względem, @rampion - i robi to, co napisał @kynan.Jeśli plik jest już zapisany:
Przykład:
Wymagania dotyczące zezwolenia:
Zapisz jako:
Dla Windows niezweryfikowany
źródło
Polecam
:Rename
z tpope za eunucha do tego.Zawiera także kilka innych przydatnych poleceń.
Polecenie Zmień nazwę jest obecnie zdefiniowane w następujący sposób (sprawdź, czy w repozytorium nie ma aktualizacji!):
źródło
Możesz to również zrobić za pomocą netrw
Polecenie explorer otwiera netrw w katalogu otwartego pliku
Przesuń kursor nad plikiem, którego nazwę chcesz zmienić:
Wpisz nową nazwę, naciśnij enter, naciśnij y.
źródło
Krótko, bezpiecznie, bez wtyczki:
control+ R, #natychmiast zostanie rozwinięty do alternatywnego pliku (poprzednio edytowanej ścieżki w bieżącym oknie) przed naciśnięciem Enter. To pozwala nam sprawdzić, co dokładnie zamierzamy usunąć. Używanie potoku
|
w takim przypadku nie jest bezpieczne, ponieważ jeślisav
z jakiegoś powodu zawiedzie,#
nadal będzie wskazywać inne miejsce (lub nic). To znaczy!rm #
lubdelete(expand(#))
może usunąć zupełnie inny plik! Zrób to ostrożnie ręcznie lub użyj dobrego skryptu (są one wymienione w wielu odpowiedziach tutaj).Edukacyjny
... lub spróbuj samodzielnie zbudować funkcję / polecenie / skrypt. Zacznij od czegoś prostego:
po przeładowaniu vimrc, po prostu wpisz
:Rename new_filename
. Jaki jest problem z tym poleceniem?Test bezpieczeństwa 1: Co robi
:Rename
bez argumentów?Tak, usuwa plik ukryty w '#'!
Rozwiązanie: możesz użyć np. warunki lub
try
takie oświadczenie:Test bezpieczeństwa 1:
:Rename
(bez argumentów) zgłosi błąd:Test bezpieczeństwa 2: Co jeśli nazwa będzie taka sama jak poprzednia?
Test bezpieczeństwa 3: Co się stanie, jeśli plik będzie w innej lokalizacji niż Twoja rzeczywista?
Napraw to sam. Aby zwiększyć czytelność, możesz napisać to w następujący sposób:
notatki
!rm #
jest lepsze niż!rm old_name
-> nie musisz pamiętać starej nazwy!rm <C-R>#
jest lepszy niż!rm #
kiedy robisz to ręcznie -> zobaczysz, co faktycznie usuwasz (względy bezpieczeństwa)!rm
jest ogólnie niezbyt bezpieczny ...mv
lepsza jest lokalizacja śmiecicall delete(expand('#'))
jest lepszy niż polecenie powłoki (niezależny od systemu operacyjnego), ale dłuższy do pisania i niemożliwy do użycia control+Rtry | code1 | code2 | tryend
-> gdy wystąpi błąd podczas kodu 1, nie uruchamiaj kodu 2:sav
(lub:saveas
) jest równoważne z:f new_name | w
- patrz plik_f - i zachowuje historię cofaniaexpand('%:p')
podaje całą ścieżkę twojej lokalizacji (%
) lub lokalizacji alternatywnego pliku (#
)źródło
źródło
call delete(expand('#'))
W .vimrc Gary Bernhardta jest funkcja , która to obsługuje.
źródło
Rejestr
%
zawiera nazwę bieżącego pliku.'%:h'
pokazuje katalog „head” zawierający bieżący plik, np .:%:h
zwraca,/abc/def
gdy pełna ścieżka pliku jestabc/dev/my.txt
źródło
Co powiesz na to (poprawione sugestią Jake'a):
źródło
:exe "!mv % newfilename" | e newfilename
Vim ma
rename
funkcję, ale niestety nie zachowuje historii.Najłatwiejszym agnostycznym sposobem zmiany nazwy pliku bez utraty historii jest:
expand('#:p')
zwraca pełną ścieżkę starszego pliku.Użyj,
:bd #
jeśli chcesz również usunąć starszy plik z listy buforów.Lub utwórz wtyczkę
Jeśli chcesz użyć szybkiego polecenia do zmiany nazwy pliku, dodaj nowy plik w ~ / .vim / plugin z następującą zawartością:
Polecenie
Rename
pomoże ci szybko zmienić nazwę pliku.źródło
Istnieje znacznie większa wtyczka o nazwie vim-eunuch autorstwa Tima Pope'a, która zawiera funkcję zmiany nazwy, a także kilka innych dodatków (usuwanie, znajdowanie, zapisywanie wszystkich, chmod, edycja sudo, ...).
Aby zmienić nazwę pliku w vim-eunuch:
:Move filename.ext
W porównaniu do rename.vim:
:rename[!] filename.ext
Zapisuje kilka naciśnięć klawiszy :)
źródło
Aby zmienić nazwę istniejącego pliku bez użycia wtyczek, należy użyć polecenia
To polecenie pozwala przeglądać pliki w. Katalogu, usuwać je lub zmieniać ich nazwy. niż powinieneś przejść do niezbędnego pliku w eksploratorze niż
R
polecenie type, które pozwoli ci zmienić nazwę plikuźródło
Nie wiem, czy jest to „najłatwiejsza” metoda, ale zakładając, że już zapisałeś swój plik (: w), wywołałbym powłokę (: sh) i wykonałem prosty procesor cp foo foo.bak Aby wrócić do edytora użyj Ctrl-D / Exit. Przydatna lista komend edytora vi w tym linku
źródło
Możesz także użyć: f, a następnie: w
źródło
Ten mały skrypt nie jest idealny (dodatkowy zwrot karetki, który musisz nacisnąć), ale wykonuje zadanie.
źródło
Innym sposobem jest użycie netrw, który jest natywną częścią vima.
Następnie są opcje usuwania, zmiany nazwy itp.
Oto mapa klawiszy, aby otworzyć netrw w folderze edytowanego pliku:
źródło
:sav newfile | !rm #
Pamiętaj, że nie usuwa starego pliku z listy buforów. Jeśli jest to dla Ciebie ważne, możesz zamiast tego użyć następujących opcji:
:sav newfile | bd# | !rm #
źródło