Vim: Видаліть буфер, не втрачаючи розділеного вікна


149

Коли буфер видаляється (команда "bd [elete]"), він не тільки видаляє буфер, але й видаляє розділене вікно, в якому знаходився буфер.

Чи є спосіб видалити / вивантажити буфер і зберегти вікно розділеним?



Це добре спрацювало для мене.
Рем Стілцькін

[Цей DeleteCurBufferNotCloseWindow()працює добре і читається] ( stackoverflow.com/a/44950143/3625404 ).
qeatzy

Відповіді:



327

bp|bd # зробимо це.


Деталі: bp("попередній буфер") переміщує нас до іншого буфера в поточному вікні (також bnбуде працювати), потім bd #("буфер видалення" "альтернативний файл") видаляє буфер, з якого ми щойно переїхали. Див: help bp, help bd, help alternate-file.


71
Ви не маєте поняття, як довго я шукав щось подібне, яке є таким простим, не вимагає і цілого сценарію для його запуску. У моєму VIMRC тепер я відобразив це на CTRL + C:nnoremap <C-c> :bp\|bd #<CR>
Хмара

11
Я намагаюся перевпорядкувати використання nmap <silent> <leader>d :bp|bd #<CR>, але я отримую E94: No matching buffer for #<CR>.
Фабіо Перес

22
Покладіть зворотний нахил перед |(наприклад :bp\|bd)
Грязь

4
Я знав, що не потрібно встановлювати плагін для цього. Дякую!
Акаш Агравал

2
b#|bd #переключиться на останній використаний буфер замість наступного / попереднього. Однак, якщо вона є, вона перейде до прихованих буферів set hidden, тому я зробив більш розумну функцію BD, щоб уникнути цього.
c24w

15

Ви можете додати наступне до свого, .vimrcщоб мати Bdроботу як, bdале не торкаючись розбивки вікна:

command Bd bp\|bd \#

Я вважав це корисним доповненням до того, що відповів Грязь.


Саме це я маю в своєму .vimrc. :)
Грязь

І ви можете додати 3 команди для вивантаження, видалення та витирання буфера: команда! BUN bp \ | bun \ # команда! Команда BD bp \ | bd \ #! BW bp \ | bw \ #, що еквівалентно тому, що надає bufkill, але з 3 рядками у vimrc замість плагіна 700+ рядків!
п'ятниця

3
Для мене він працював лише з цим у .vimrc command! Bd bp|bd #. Команда вгорі із командою `` зберігала буфер у списку буферів.
mljrg


3

Я роблю щось подібне до @Mud, але перемикаюся на попередній буфер перегляду #, замість попереднього буфера в списку буферів. Ось обов'язковий ключ у моєму .vimrc:

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

Закрийте вікна розташування, якщо вони існують, переключіться на попередній буфер перегляду, а потім закрийте останній переключений буфер.


1

Мій вибір є

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

Думай так! /// <1. Нагадаємо, буфер> | <2. Видалити буфер>

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

чому ?! Запам'ятати 3 (+ 1) ключове слово легко!

  1. sb split_buffer
  2. bd буфер видалення ▶ прості 2 ключові слова
  3. № або кількість буфера
  4. vert ▶ коротка_форма вертикалі (split_buffer або інше)

Це просто і дуже корисно в багатьох інших багатьох випадках!

Гарного дня! :)


0

Раніше я використовував:

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

Але я знайшов певні випадки, коли воно закривало моє вікно. Крім того, наступний або попередній буфер може бути не тим, що ви хочете відображати в розділі.

Тепер я роблю це:

  • перейти на буфер, над яким я хочу працювати
  • Видаліть альтернативний буфер

nnoremap <leader>d :bd#<CR>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.