20

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

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

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

:command! BW :bn|:bd#

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

7 ответов7

19

Я немного запутался в этом и, наконец, придумал:

:bp | sp | bn | bd

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

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

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

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

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

10

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

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

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

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

4

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

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. Работает хорошо, даже если загружено только одно окно.
2

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

0

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

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

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

0

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

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

Мои шаги это:

:Vex

ctrl + w + w

:bd

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .