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.
r
polecenia! 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 :ls
i można go przywrócić w :b
ten sposób; zachowuje nazwę pliku i opcje bufora, ale nie zawartość pliku.)
:call delete(@%)|bd!
i używać :ls!
z, :b
aby 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 :cd
tam się wydałeś. Dlatego zdecydowanie zalecam używanie %:p
zamiast, %
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
find
lub alocate
do 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ć confirm
polecenia 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 :cd
tam 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ź.