Закрыть и выгрузить буфер без выхода из Vim


55

Часто я загружаю некоторую информацию во временный буфер, а затем закрываю ее :clo!. Но это скрывает буфер, а не выгружает его полностью, даже если я nohiddenустановил. Я нахожу это утомительным, так как я получаю дополнительное подтверждение, когда я покидаю Vim, о контенте, который я уже (думал я) удалил.

Я мог бы просто использовать :q!вместо этого, но это плохая привычка, потому что он выйдет из Vim полностью, если останется только один буфер, что тоже раздражает. Хуже того, если я опечатаюсь :qa!, я могу потерять много работы.

Есть ли золотая середина? Мне бы очень хотелось, чтобы какая-то команда убивала текущий буфер, но не выходила из Vim. Я не против написания этого в Vimscript, но я бы предпочел избежать этого, если команда уже существует.

Ответы:


70

Есть команда, чтобы сделать именно это: :bdeleteили просто :bd. По умолчанию он выгружает текущий буфер. Чтобы выгрузить другой буфер, сначала получите список всех буферов с помощью :buffersкоманды, а после этого вы можете указать число после :bdего удаления. Также :bd+ space+ tabпозволяет завершить, используя имя буфера.


1
Это будет работать с последним открытым буфером, что не совсем то , что я хотел, но так как он не завершается, этого достаточно для моих целей.
Кевин

Плагин vim-bbye может быть тем, что вы ищете: github.com/moll/vim-bbye
alxndr

1
Это не работает в VI
благоухающий

Кроме того, встроенный псевдоним :lsлегче запомнить (imo), и он делает то же самое, что и:buffers
kuzyn

Это не выгружает буфер. Это даже не закрывает его. Он просто отменяет «добавление в буфер». vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE

27

Вы можете полностью стереть буфер, используя команду: bwipeout (или: bw). Это полностью удаляет буфер из памяти, включая любые метки, настройки параметров и т. Д., Которые вы добавили в него. Точно так же: bdelete (или: bd) удаляет буфер, но оставляет его в памяти и сохраняет метки и настройки параметров.

Согласно комментарию Тома Хейла, документация Vim рекомендует использовать: bd over: bw, если вы не знаете, что делаете. Я склонен использовать: bw, потому что мне нравится идея полного удаления буфера из памяти, и я не слишком часто использую метки, настройки параметров буфера и т. Д., Чтобы они оставались после закрытия моего буфера.

Как и команда: quit (: q), Vim выдаст ошибку, если буфер был изменен. Чтобы решить эту проблему, вы можете добавить восклицательный знак после команды, чтобы подавить запрос. Другой вариант, вместо того, чтобы добавлять восклицательные знаки ко всему, - добавить «set verify» в ваш vimrc. С этим набором vim предложит вам сохранить изменения файла при закрытии.

: bufdo - полезная команда, которая выполняет другую команду для всех активных буферов. Комбинация команды: bufdo с командой: bw /: bd позволяет вам удалить все активные буферы одновременно. Вы по-прежнему можете использовать восклицательный знак для подавления ошибок, но если вы поместите его после: bufdo, after: bw или после обоих, это приведет к разным результатам для каждого:

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

Вот несколько других полезных буферных команд:

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

Существует еще много возможностей для обработки буфера, что выходит за рамки этого вопроса. Взгляните на:
http://vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers


Можете ли вы добавить некоторые объяснения к этому ответу?
EvergreenTree

Справка гласит: «Не используйте это, если вы не знаете, что делаете», указывая, что :bdв большинстве случаев это предпочтительнее
Том Хейл,

1
@TomHale Было бы хорошо узнать, что еще :bwпроисходит, кроме «Все, что связано с буфером, потеряно. Все метки в этом буфере становятся недействительными, настройки параметров теряются и т. Д.». Это кажется вполне разумным, если я хочу «закрыть» буфер, как если бы я полностью вышел из Vim.
Кенни Эвитт

Я предпочитаю: bw, а не bd, потому что, если вы используете: bd, а затем нажмите <ctrl - ^>, чтобы перейти к последнему используемому буферу, он выведет его из памяти. : bw дает мне больше контроля и делает то, что я хочу ^^
eli

это здорово! спасибо @ Soylent17!
Аполлон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.