Закрити файл, не закриваючи програму VIM?


258

Я використовую команди :eі :wдля редагування та запису файлу. Я не впевнений, чи існує команда "закрити", щоб закрити поточний файл, не залишаючи Vim?

Я знаю, що :qкоманду можна використовувати для закриття файлу, але якщо це останній файл, Vim також закривається; Насправді на Mac OS MacVim все-таки вийшов. Тільки вікно Vim закрите, і я міг би використати Control- Nзнову відкрити порожнє вікно Vim. Я хотів би, щоб Vim залишався відкритим із порожнім екраном.

Відповіді:


343

Це видаляє буфер (що перекладається для закриття файлу)

:bd 

6
Ваш краще, ніж мій, за те, що запитував ОП, хоча я, як правило, віддаю перевагу: enew, тому що мені подобається мати буфер у списку буферів. :)
Ритміс

2
Коли я це роблю, vim показує перший буфер, але я все ще можу отримати доступ до буфера
Мартін Андерссон

18
@Martin, щоб повністю видалити буфер, використовуйте : bw
sebnow

43

Як уже згадувалося, ви шукаєте :bd, однак це не повністю видаляє буфер, він все ще доступний:

:e foo
:e bar
:buffers
  1 #h   "foo"                          line 1
  2 %a   "bar"                          line 1
Press ENTER or type command to continue
:bd 2
:buffers
  1 %a   "foo"                          line 1
Press ENTER or type command to continue
:b 2
2   bar

Ви можете замість цього захотіти, :bwщо повністю видаляє його.

:bw 2
:b 2 
E86: Buffer 2 does not exist

Не знаючи про :bwклопіт мене досить довго.


3
Просто майте на увазі, що довідка VIM говорить про це :bw- "Не використовуйте це, якщо ви не знаєте, що робите".
мато

22

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

map fc <Esc>:call CleanClose(1)

map fq <Esc>:call CleanClose(0)


function! CleanClose(tosave)
if (a:tosave == 1)
    w!
endif
let todelbufNr = bufnr("%")
let newbufNr = bufnr("#")
if ((newbufNr != -1) && (newbufNr != todelbufNr) && buflisted(newbufNr))
    exe "b".newbufNr
else
    bnext
endif

if (bufnr("%") == todelbufNr)
    new
endif
exe "bd".todelbufNr
endfunction

12
Тепер, що робить цей фрагмент?
dolzenko

1
Ймовірно, ви хочете, щоб <CR> після викликів фактично виконати команду.
dma

2
@dolzenko він відображає 'fc' і 'fq' у звичайному режимі, щоб додатково зберегти поточний буфер, а потім перейти до нового буфера перед видаленням оригіналу. Це дозволяє зберегти будь-які створені вами розколи.
dma

Здається, гарна ідея. Коли я спробую це, я отримую таке повідомлення про помилку: "Неможливо змінити функцію CleanClose: вона використовується"
jononomo

2
Не перезавантажуйте "f". . . "f" насправді супер корисний. За допомогою цього відображення ви ніколи не можете "знайти" вперед для "c" або "q".
tandrewnichols

17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Вивантажте буфер [N] (за замовчуванням: поточний буфер) та видаліть його
                список буфера Якщо буфер було змінено, це не вдасться,
                якщо тільки не вказано [!], у цьому випадку зміни втрачаються.
                Файл не змінюється. Будь-які вікна цього буфера є
                зачинено. Якщо буфер [N] є поточним буфером, інший буфер
                замість цього буде відображено Це самий останній запис у
                список стрибків, який вказує на завантажений буфер.
                Насправді буфер не повністю видалений, він видалений
                зі списку буферів | буфер невнесених до списку | і значення опцій,
                змінні та відображення / скорочення буфера є
                очищено.

9

Якщо ви вже зберегли останній файл, то :enewце ваш друг ( :enew!якщо ви не хочете зберегти останній файл). Зауважте, що початковий файл все ще буде у вашому списку буферів (той, через який можна отримати доступ через :ls).


6

Якщо ви модифікуєте файл і хочете закрити його, не виходячи з Vim та не зберігаючи, слід ввести :bd!.


3

:bdможна відобразити на карті. Я відображаю це F4, Shift- F4якщо мені потрібно змусити закрити через якусь зміну, я більше не хочу.


2

Bufkill.vim плагін додає і BDт.д., щоб видалити буфер без закриття будь - яких розколів (а bd) б в поодинці.


1

Вставте наступне у свій .vimrc файл і, натиснувши F4, він закриє поточний файл.

:map <F4> :bd<CR>


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