Zamknij i zwolnij bufor bez wychodzenia z Vima

54

Często ładuję informacje do tymczasowego bufora, a następnie zamykam je :clo!. Ale to ukrywa bufor zamiast całkowicie go rozładowywać, mimo że nohiddenustawiłem. Uważam to za męczące, ponieważ po wyjściu z Vima otrzymuję dodatkowe potwierdzenie dotyczące treści, które już (myślałem) odrzuciłem.

Mógłbym po prostu użyć :q!zamiast tego, ale jest to zły nawyk, aby się w niego wpakować, ponieważ całkowicie opuści on Vima, jeśli pozostanie tylko jeden bufor, co również jest denerwujące. Gorzej, gdybym popełnił literówkę :qa!, mógłbym stracić dużo pracy.

Czy jest środek ziemi? Naprawdę chciałbym jakieś polecenie, które zabija bieżący bufor, ale nie wychodzi z Vima. Nie jestem przeciwny pisaniu go w Vimscript, ale wolałbym go unikać, jeśli polecenie już istnieje.

Kevin
źródło

Odpowiedzi:

69

Jest polecenie, aby zrobić dokładnie to: :bdeletelub po prostu :bd. Domyślnie zwalnia bieżący bufor. Aby zwolnić inny bufor, najpierw uzyskaj listę wszystkich buforów za pomocą :bufferspolecenia, a następnie możesz podać numer po, :bdaby go usunąć. Ponadto :bd+ space+ tabumożliwia się wykorzystując nazwę buforu.

tivn
źródło
1
Będzie działał na ostatnim otwartym buforze, co nie jest dokładnie tym , czego chciałem, ale ponieważ nie wychodzi, jest wystarczająco dobry do moich celów.
Kevin,
Wtyczka vim-bbye może być tym, czego szukasz: github.com/moll/vim-bbye
alxndr
1
To nie działa w vi
redolent
Również wbudowany alias :lsjest łatwiejszy do zapamiętania (imo) i robi to samo, co:buffers
kuzyn
To nie zwalnia bufora. To nawet go nie zamyka. Po prostu wyłącza „buflisted”. vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE
27

Możesz całkowicie wyczyścić bufor, używając polecenia: bwipeout (lub: bw). To całkowicie usuwa bufor z pamięci, w tym wszelkie dodane do niego znaki, ustawienia opcji itp. Podobnie:: bdelete (lub: bd) usuwa bufor, ale pozostawia go w pamięci i zachowuje znaczniki oraz ustawienia opcji.

Zgodnie z komentarzem Toma Hale'a, dokumentacja Vima zaleca użycie: bd ponad: bw, chyba że wiesz, co robisz. Zwykle używam: bw, ponieważ podobnie jak pomysł całkowitego usunięcia bufora z pamięci, i nie używam znaczników, ustawień opcji specyficznych dla bufora itp., Do tego stopnia, że ​​muszę je pozostać po zamknięciu bufora.

Podobnie jak polecenie: quit (: q), Vim wyświetli błąd, jeśli bufor się zmieni. Aby rozwiązać ten problem, możesz dodać wykrzyknik po poleceniu, aby wyłączyć monit. Inną opcją, zamiast dodawania wykrzykników do wszystkiego, jest dodanie „ustaw potwierdzenie” do vimrc. Z tym zestawem vim wyświetli monit o zapisanie zmian pliku przy zamknięciu.

: bufdo to przydatne polecenie, które wykonuje inne polecenie na wszystkich aktywnych buforach. Połączenie polecenia: bufdo z poleceniem: bw /: bd pozwala usunąć wszystkie aktywne bufory na raz. Nadal możesz używać wykrzyknika, aby ukryć błędy, ale to, czy umieścisz go po: bufdo, po: bw, czy po obu powoduje różne wyniki dla każdego z nich:

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

Oto kilka innych przydatnych poleceń bufora:

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

Obsługa bufora nie ogranicza się do zakresu tego pytania. Zobacz:
http://vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers

Soylent17
źródło
Czy możesz dodać wyjaśnienie do tej odpowiedzi?
EvergreenTree,
Pomoc mówi „nie używaj tego, chyba że wiesz, co robisz”, co oznacza, że :bdjest to preferowane w większości przypadków
Tom Hale
1
@TomHale Byłoby miło wiedzieć, co jeszcze :bwrobi poza „Utracono wszystko związane z buforem. Wszystkie znaczniki w tym buforze tracą ważność, ustawienia opcji zostają utracone itp.” Wydaje mi się to całkowicie rozsądne, jeśli chcę „zamknąć” bufor, tak jak byłoby, gdybym całkowicie opuścił Vima.
Kenny Evitt,
Wolę: bw zamiast: bd, ponieważ jeśli użyjesz: bd, a następnie naciśnij <ctrl - ^>, aby przejść do ostatnio używanego bufora, przywoła go z pamięci. : bw daje mi większą kontrolę i robi to, co chcę ^^
eli
to jest świetne! dzięki @ Soylent17!
apollo