Як закрити буфер, не закриваючи вікно?


23

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

Але біль полягає в тому, що я видаю :bdі :bwпризводить до закриття вікна, якщо у мене відкрито кілька. Як закрити (видалити) буфер і залишити вікном недоторканим?

Рішення, натхнене відповіддю @ peth

:command! BW :bn|:bd#

Це просто. Не працює добре лише з одним відкритим буфером (я отримую різну поведінку залежно від способу відкриття файлів), але це не велика проблема. :)

Відповіді:


12

Це може бути біль, це питання виникає знову і знову #vim(Freenode) теж.

Деякі люди рекомендують не видаляти буфери та перемикатись :b partial<Tab>замість того :bn, що працює, але це не те, що ви запитуєте.

Найкращий спосіб, який я знаю, це зробити - це переключитися на інший буфер, а потім :bd#, який ви, звичайно, можете зіставити.

Див. Також Видалення буфера, не закриваючи вікно на вікі Vim.


Сценарій виглядає рішенням, яке я готовий прийняти, якщо немає офіційного способу. :)
unperson325680

21

Я трохи заплутався з цим і, нарешті, придумав:

:bp | sp | bn | bd

Ось версія копіювання / вставки для відображення ключів:

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

Або команда для вашого .vimrc (дзвінок з: Bd):

команда Bd bp | сп | bn | бд

Я досить перевірив це, і він працює стабільно в різних умовах. При використанні в останньому буфері він залишить вам новий порожній буфер.


3
Я втрачаю розкол, якщо закриваю буфер відкритим в обох вікнах, наприклад, останній буфер. +1 за те, що він простіший за сценарії wikia для bd, не закриваючи вікно .
Лейф Карлсен

Я використовував vim-bbye, але ваша відповідь набагато простіша і не залежить від будь-якого сценарію. Дякую.
Ендрю-Дуфресне

4

Вікно - це вікно перегляду в буфер. (Див :help window.) Ви не можете мати вікно без пов'язаного буфера. Ви можете використовувати таку команду, як :enewзамінити поточний вміст вікна порожнім буфером.


Я очікував, що після видалення буфера 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. Оригінальний буфер все ще завантажений, використовуйте: буфери, щоб перелічити його.
  4. Ctrl + o переміщує курсор у вихідне положення у старому буфері, якщо вам потрібно повернутися назад.
  5. Добре працює, навіть якщо завантажено лише одне вікно.

1

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

Люди схильні вважати вікно vim як самостійний процес, який має власний список буферів, але, на жаль, це не так. Вікно vim - це лише перегляд його буферів.
Тому виникає багато проблем, як ваша проблема, або проблема того, що різні вікна ділять один і той самий список буфера, щоб ви не могли редагувати буфер 1 у вікні A, а дозволити вікно B ігнорувати буфер 1 у своєму буферному списку.

Моє рішення - відкрити два екземпляри vim, щоб ви могли мати тип вікна, який ви хочете. Найкраще він працює на плитці WM.


1

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

Після цього я можу відкрити інший файл з меню.

Мої кроки:

:Vex

ctrl + w + w

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