Vim: Удалить буфер без потери разделенного окна


149

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

Есть ли способ удалить / выгрузить буфер и держать окно разделенным?



Это хорошо сработало для меня.
Rumple Stiltskin

[Этот DeleteCurBufferNotCloseWindow()работает хорошо и вполне читабельно] ( stackoverflow.com/a/44950143/3625404 ).
qeatzy

2
Возможная
копия

Ответы:



327

bp|bd # сделаю это.


Детали: bp("buffer previous") перемещает нас в другой буфер в текущем окне ( bnтоже будет работать), затем bd #("buffer delete" "альтернативный файл") удаляет буфер, из которого мы только что удалили. См: 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 ▶ short_form вертикали (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.