Закрийте та вивантажте буфер, не виходячи з 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

Це не завантажує буфер. Це насправді навіть не закриває. Він просто скасовує "buflisted". vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE

27

Ви можете повністю стерти буфер за допомогою команди: bwipeout (або: bw). Це повністю видаляє буфер із пам'яті, включаючи будь-які позначки, параметри параметрів тощо, які ви додали до нього. Аналогічно: bdelete (або: bd) видаляє буфер, але залишає його в пам'яті та зберігає позначки та параметри параметрів.

Відповідно до коментаря Тома Хейла, документація Vim рекомендує використовувати: bd over: bw, якщо ви не знаєте, що робите. Я схильний використовувати: bw, тому що мені подобається ідея повністю видалити буфер з пам'яті, і я не використовую багато знаків, параметрів, специфічних для буфера, і т. Д., Щоб змусити їх залишатися після закриття буфера.

Як і команда: quit (: q), Vim видасть помилку, якщо буфер змінився. Щоб вирішити це, ви можете додати знак оклику після команди, щоб придушити підказку. Ще один варіант, замість того, щоб до всього додавати знаки оклику, - це додати "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 over: bd, тому що якщо ви використовуєте: bd, а потім натисніть <ctrl - ^>, щоб перейти до останнього використовуваного буфера, це виведе його з пам'яті. : bw дає мені більше контролю і робить те, що я хочу ^^
eli

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