Vim: Usuń bufor bez utraty podzielonego okna

149

Kiedy bufor zostaje usunięty (polecenie „bd [elete]”), nie tylko usuwa bufor, ale także usuwa okno podziału, w którym znajdował się bufor.

Czy istnieje sposób na usunięcie / wyładowanie bufora i zachowanie podziału okna?

byneri
źródło
3
możliwy duplikat tego, jak usunąć bufor z gvim bez zamykania okna
ZyX
To działało dobrze dla mnie.
Rumple Stiltskin
[Ten DeleteCurBufferNotCloseWindow()działa dobrze i jest całkiem czytelny] ( stackoverflow.com/a/44950143/3625404 ).
qeatzy

Odpowiedzi:

327

bp|bd # zrobię to.


Szczegóły: bp(„bufor poprzedni”) przenosi nas do innego bufora w bieżącym oknie (też bnby działał), a następnie bd #(„usuwanie bufora” „plik alternatywny”) usuwa bufor, z którego właśnie się przenieśliśmy. Patrz: help bp, help bd, help alternate-file.

Błoto
źródło
71
Nie masz pojęcia, jak długo szukałem czegoś takiego, co jest tak proste, nie wymagające i całego skryptu do uruchomienia. W moim VIMRC mam to teraz zmapowane dla CTRL + C:nnoremap <C-c> :bp\|bd #<CR>
Chmura
11
Próbuję ponownie mapować używając nmap <silent> <leader>d :bp|bd #<CR>, ale dostaję E94: No matching buffer for #<CR>.
Fábio Perez,
22
Umieść ukośnik odwrotny przed |(np. :bp\|bd)
Błoto
4
Wiedziałem, że nie powinienem instalować do tego wtyczki. Dzięki!
Akash Agrawal
2
b#|bd #przełączy się na ostatnio używany bufor zamiast na następny / poprzedni. Jeśli jednak masz set hidden, przeskoczy do ukrytych buforów , więc stworzyłem bardziej inteligentną funkcję BD, aby tego uniknąć.
c24w
15

Można dodać następujące wpisy do .vimrcuzyskania Bdpracy jako bdale bez dotykania dzieli okno:

command Bd bp\|bd \#

Uznałem to za przydatne uzupełnienie odpowiedzi Mud.

rrosa
źródło
To jest dokładnie to, co mam w moim .vimrc. :)
Błoto
Możesz dodać 3 polecenia do wyładowywania, usuwania i wymazywania bufora: polecenie! BUN bp \ | bun \ # polecenie! Polecenie BD bp \ | bd \ #! BW bp \ | bw \ # co jest równoważne temu, co dostarcza bufkill, ale z 3 liniami w vimrc zamiast wtyczki 700+ linii!
fievel
3
U mnie działało tylko z tym w .vimrc command! Bd bp|bd #. Powyższe polecenie z `` zachował bufor na liście buforów.
mljrg
3

Robię coś podobnego do @Mud, ale przełączam się na poprzedni bufor widoku #, zamiast poprzedniego bufora na liście buforów. Oto klucz wiążący w moim .vimrc:

nnoremap <silent> <leader>q :lclose<bar>b#<bar>bd #<CR>

Zamknij okna lokalizacji, jeśli istnieją, przełącz się na poprzedni bufor widoku, a następnie zamknij ostatni przełączany bufor.

lvarayut
źródło
1

Mój wybór jest

:sb # | bd #
:sb 1 | bd #
: <1. Recall Buffer> | <2. Delete Buffer>

Pomyśl w ten sposób! /// <1. Przywołaj bufor> | <2. Usuń bufor>

:vert sb 2 | bd #
:vert sb <tab key~completed file(buffer)name> | bd #

czemu?! Łatwo zapamiętać 3 (+ 1) słowo kluczowe!

  1. sb split_buffer
  2. bd usuń bufor ▶ proste 2 słowa kluczowe
  3. # lub liczba buforów
  4. vert ▶ short_form of vertical (split_buffer lub else)

To jest łatwe i bardzo przydatne w wielu innych przypadkach!

Miłego dnia! :)

Jeongpyo Lee
źródło
0

Zwykłem używać :

:bp<bar>sp<bar>bn<bar>bd<CR>

Ale znalazłem pewne sytuacje, w których zamykało moje okno. Ponadto następny lub poprzedni bufor może nie być tym, co chcesz, aby był wyświetlany w podziale.

Teraz robię to:

  • przełącz się na bufor, nad którym chcę pracować
  • Usuń alternatywny bufor

nnoremap <leader>d :bd#<CR>

DaftWooly
źródło