Как закрыть буфер без закрытия окна?

23

Я обычно открываю несколько окон и держу открытыми некоторые буферы. Так как мой МО в исследовании буфера должен использовать быстрые ярлыки для :bnи :bp, я хочу закрыть ненужные буферы, чтобы отвлекать мой буферный серфинг.

Но боль заключается в том, что выдача :bdи :bwприводит к закрытию окна, если у меня открыто несколько окон. Как закрыть (удалить) буфер и оставить окна нетронутыми?

Решение, вдохновленное ответом @ peth

:command! BW :bn|:bd#

Это просто. Не работает только с одним открытым буфером (я получаю различное поведение в зависимости от того, как я открываю файлы), но это не большая проблема. :)

unperson325680
источник

Ответы:

12

Это может быть боль, этот вопрос поднимается снова и снова #vim(Freenode).

Некоторые люди рекомендуют не удалять буферы и переключаться :b partial<Tab>вместо них :bn, что работает, но это не то, что вы просите.

Лучший из известных мне способов сделать это - переключиться на другой буфер и затем :bd#, что вы, конечно, можете отобразить.

Смотрите также Удаление буфера без закрытия окна в вики Vim.

Peth
источник
Сценарий выглядит решением, которое я готов принять, если нет официального пути. :)
unperson325680
21

Я немного облажался и наконец придумал:

:bp | sp | bn | bd

Вот версия копирования / вставки для сопоставления клавиш:

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

Или команда для вашего .vimrc (вызов с: Bd):

команда Bd bp | sp | бн | бод

Я проверил его достаточно, и он работает последовательно в различных условиях. При использовании в последнем буфере он оставит новый пустой буфер.

Иона Браун
источник
3
Я теряю разделение, если закрываю буфер, открытый в обоих окнах, например в последнем буфере. +1 за то, что он проще, чем сценарии викия для bd без закрытия окна .
Лейф Карлсен
Я использовал vim-bbye, но ваш ответ намного проще и не зависит от какого-либо сценария. Спасибо.
Эндрю-Дюфрен
4

Окно - это окно просмотра в буфер. (См :help window.). У вас не может быть окна без связанного буфера. Вы можете использовать команду, например, :enewчтобы заменить текущее содержимое окна пустым буфером.

garyjohn
источник
Я ожидал, что после удаления буфера vim сможет переключиться на другой буфер или открыть новый при необходимости.
unperson325680
@progo, для этого потребуются некоторые сценарии, т. е. плагин или простое отображение.
Клинт Пахл
2

bufkill.vim плагин работает хорошо. Мне нравится использовать его с vim-command-w для дополнительной функциональности и тонкостей (например, он закрывает разделение, если это последний буфер, или закрывает vim, если это последний буфер / разделение).

Аарон Дженсен
источник
2

Вот еще одно решение:

map <C-W>o <C-W>n<C-W><C-W><C-W>c

Нажав Ctrl + W, вы тихо создадите новое окно и закроете старое окно. Курсор оставлен в новом окне. Есть ряд положительных эффектов:

  1. Ваши оригинальные размеры раскола сохранены.
  2. Пустой буфер загружается в новый сплит.
  3. Исходный буфер все еще загружен, используйте: buffers, чтобы вывести его.
  4. Ctrl + o перемещает курсор в исходное положение в старом буфере, если вам нужно вернуться назад.
  5. Работает хорошо, даже если загружено только одно окно.
rustushki
источник
1

Я думаю, проблема в том, что большинство людей ожидают, что vim buffer и window будут чем-то, чем они не являются.

Люди склонны рассматривать окно vim как отдельный процесс, который имеет свой список буферов, но, к сожалению, это не так. Окно vim - это только окно просмотра его буферов.
Поэтому возникает много проблем, таких как ваша проблема, или проблема, связанная с тем, что разные окна совместно используют один и тот же список буферов, поэтому вы не можете редактировать буфер 1 в окне A и позволять окну B игнорировать буфер 1 в своем списке буферов.

Мое решение состоит в том, чтобы открыть два экземпляра vim, чтобы вы могли иметь желаемое окно vim. Лучше всего работает на тайлинг WM.

octref
источник
1

Обычно я просто открываю меню в любом буфере. Это откроет меню на левой панели, и курсор будет активен там. Поэтому я просто переключаюсь обратно в активный буфер и удаляю буфер.

После этого я могу открыть другой файл из меню.

Мои шаги это:

:Vex

ctrl + w + w

:bd
Апит Джон Исмаил
источник