Закрыть файл, не выходя из приложения VIM?

258

Я использую :eи :wкоманды для редактирования и записи файла. Я не уверен, есть ли команда «закрыть», чтобы закрыть текущий файл, не выходя из Vim?

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

David.Chu.ca
источник

Ответы:

343

Это удаляет буфер (который переводит, чтобы закрыть файл)

:bd 
Винко Врсалович
источник
6
Ваш ответ лучше, чем мой, за то, что спросил OP, хотя я предпочитаю: enew, потому что мне нравится иметь буфер в списке буферов. :)
Rytmis
2
Когда я делаю это, vim показывает первый буфер, но я все еще могу получить доступ к буферу
Martin Andersson
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меня долго ждали.

sebnow
источник
3
Просто помните, что помощь VIM говорит об этом: :bw«Не используйте это, если не знаете, что делаете».
Мат
23

Если у вас есть несколько разделенных окон в вашем окне 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
Gowri
источник
13
Теперь, что делает этот фрагмент?
dolzenko
1
Вы, вероятно, хотите, чтобы <CR> после вызовов фактически выполняла команду.
ДМА
2
@ dolzenko он отображает «fc» и «fq» в обычном режиме, чтобы при желании сохранить текущий буфер, затем переключиться на новый буфер перед удалением оригинала. Это сохраняет любые расколы, которые вы создали.
ДМА
Похоже, хорошая идея. Однако, когда я пытаюсь это сделать, я получаю следующее сообщение об ошибке: «Не удается переопределить функцию CleanClose: она используется»
jononomo
2
Не переназначать "F". , , «F» на самом деле очень полезно. С этим отображением вы никогда не сможете «найти» форварда для «c» или «q».
tandrewnichols
17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Выгрузить буфер [N] (по умолчанию: текущий буфер) и удалить его из
                список буферов. Если буфер был изменен, это терпит неудачу,
                если не указано [!], в этом случае изменения теряются.
                Файл остается без изменений. Любые окна для этого буфера
                закрыто. Если буфер [N] является текущим буфером, другой буфер
                будет отображаться вместо Это самая последняя запись в
                список переходов, который указывает на загруженный буфер.
                На самом деле, буфер не полностью удален, он удален
                из списка буферов | unlisted-buffer | и значения параметров,
                Переменные и отображения / сокращения для буфера
                очищено.
ephemient
источник
9

Если вы уже сохранили последний файл, то :enewэто ваш друг ( :enew!если вы не хотите сохранять последний файл). Обратите внимание, что оригинальный файл все еще будет в вашем списке буферов (тот, который доступен через :ls).

Rytmis
источник
6

Если вы изменили файл и хотите закрыть его, не выходя из Vim и не сохраняя, вы должны ввести :bd!.

pablofiumara
источник
3

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

wbogacz
источник
2

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

blueyed
источник
1

Вставьте следующее в ваш файл .vimrc и, нажав F4, закроет текущий файл.

:map <F4> :bd<CR>
Stryker
источник
0

Посмотрите на плагин Butane, чтобы сохранить расположение окон при закрытии буфера.

Гари Уиллоуби
источник
-1

У меня та же проблема, поэтому я сделал плагин. Этот плагин заменяет: q и другие команды, а затем предотвращает закрытие окна.

Если проблема не устранена, попробуйте использовать следующий плагин. https://github.com/taka-vagyok/prevent-win-closed.vim

Такаси Кодзима
источник