Jak mogę usunąć z dysku aktualnie otwarty plik z poziomu vima? Byłoby miło również zamknąć bufor.
Widzę, że możesz do tego użyć NERDTree , ale nie używam tej wtyczki.
Jak mogę usunąć z dysku aktualnie otwarty plik z poziomu vima? Byłoby miło również zamknąć bufor.
Widzę, że możesz do tego użyć NERDTree , ale nie używam tej wtyczki.
Odpowiedzi:
Używanie zewnętrznego narzędzia, takiego jak rm (1) jest w porządku, ale Vim ma również własną delete()funkcję usuwania plików. Ma to tę zaletę, że jest przenośny.
:call delete(expand('%'))
Alternatywnym sposobem wyrażenia tego jest :call delete(@%)użycie %rejestru (bieżącego pliku) (wskazówka @accolade).
Aby całkowicie wyczyścić bieżący bufor, zarówno reprezentacja pliku na dysku, jak i bufor Vima, dodaj :bdelete:
:call delete(expand('%')) | bdelete!
Prawdopodobnie będziesz chciał mapować to zgodnie ze swoimi preferencjami.
rpolecenia! Lepiej prefiksuj swoje mapowanie <Leader>....
nnoremap <C-Del> :call delete(expand('%'))<CR>ale nie zamykam bufora na wypadek, gdyby stało się to przez przypadek; wtedy nadal masz szansę go zapisać.
:call delete(@%)|q!← Krótki wariant (jeśli nie chcesz go mapować). (Bufor pozostaje :lsi można go przywrócić w :bten sposób; zachowuje nazwę pliku i opcje bufora, ale nie zawartość pliku.)
:call delete(@%)|bd!i używać :ls!z, :baby ożywić.
Spójrz na Usuń pliki za pomocą polecenia Vima . Sekcja Komentarze powinna zawierać to, czego szukasz:
Zasadniczo Rm usunie bieżący plik; RM usunie bieżący plik i wyjdzie z bufora (bez zapisywania) za jednym razem.
Alternatywnie możesz po prostu wydać polecenie powłoki, aby usunąć bieżący plik:
:!rm %
!rm %, czy jest sposób na uniknięcie ostrzeżenia, gdy vim wróci do bufora?
%) z cytatami: !rm "%".
%(filepath (" filename " w terminologii vima) jak pierwotnie wywołane, potencjalnie względne, np. Tylko nazwa pliku) zamiast %:p(bezwzględna ścieżka pliku), ryzykujesz usunięcie pliku o tej samej nazwie w innym katalogu, jeśli zapomniałeś, że :cdtam się wydałeś. Dlatego zdecydowanie zalecam używanie %:pzamiast, %jeśli i tak je mapujesz.
Czasami wtyczka może być atrakcyjnym rozwiązaniem nawet w przypadku prostego problemu. W tym przypadku mamy szczęście, ponieważ istnieje eunuch.vim wszechmogącego Tima Pope'a.
Własnymi słowami eunuch.vim zapewnia
Vim sugar dla poleceń powłoki UNIX, które najbardziej tego potrzebują. Usuń lub zmień nazwę bufora i pliku źródłowego w tym samym czasie. Załaduj a
findlub alocatedo listy quickfix. I tak dalej.
Idealny. Ma to, czego potrzebujemy, a także kilka dodatkowych narzędzi, jeśli pracujemy w systemie UNIX.
Polecenie, którego szukasz, to
:Remove!
Ponownie, przemapuj go, jeśli bardzo go potrzebujesz, np :nnoremap <Leader>rm :Remove!<CR>.
mv, mkdir, find, itd. Bardzo polecam.
Lubię móc usuwać pliki z poziomu vima, ale mam też paranoję na punkcie przypadkowego usuwania ważnej pracy, która z jakiegoś powodu nie jest jeszcze pod kontrolą wersji. Uważam, że przydatne jest połączenie poprzednich informacji z @glts i @accolade z tą odpowiedzią, jak używać confirmpolecenia do wyświetlania monitu przed zamknięciem vima.
Składając je razem, dodałem do my funkcję ~/.vimrc, która wyświetla monity przed usunięciem pliku i zamknięciem bufora, i zamapowałem ją na kombinację klawiszy:
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()
fun! DeleteFileAndCloseBuffer()
let choice = confirm("Delete file and close buffer?", "&Do it!\n&Nonono", 1)
if choice == 1 | call delete(expand('%:p')) | q! | endif
endfun
Jeśli jesteś o jedno naciśnięcie klawisza mniej paranoikiem niż ja, możesz dołączyć <CR>do pierwszej linii
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>
i wystarczy raz nacisnąć klawisz powrotu.
expand('%:p')zamiast @%skryptu i tak. (Chociaż pochlebia mi, że uwzględniłeś moją wskazówkę :), korzyść zwięzłości jest marginalna w scenariuszu. Co ważniejsze %:p:) rozszerzy nazwę pliku do pełnej ścieżki bezwzględnej (którą może już być, ale nie musi). Po prostu %ryzykujesz usunięcie pliku o tej samej nazwie w innym katalogu, jeśli zapomniałeś, że :cdtam edytujesz.
Możesz to zrobić w dwóch krokach:
zapisz jako nowy plik
: w nowa nazwa pliku
usuń stary plik
! rm stara nazwa pliku
Może to być niepopularna opinia, ale eksplorator drzewa plików (Netrw / NerdTree) będzie najprostszym i najbezpieczniejszym sposobem na usunięcie pliku. Nawet jeśli OP nie używa NerdTree, wbudowana wtyczka Netrw będzie działać równie dobrze.
nnoremap rm :call delete(expand('%')) \| bdelete!<CR>. Możesz dodać swoją odpowiedź.