2008-11-01 3 views
229

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

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

ответ

306

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

:bd 
+5

Ваш лучше, чем мой, для того, что спросил ОП, хотя я предпочитаю: заново, потому что мне нравится иметь буфер в списке буферов. :) – Rytmis 2008-11-01 22:39:38

+2

Когда я это делаю, vim показывает первый буфер, но я все еще могу получить доступ к буфере – 2009-12-02 17:02:53

+12

@Martin, чтобы полностью удалить буфер, используйте **: bw ** – sebnow 2010-12-02 11:14:03

8

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

17
:[N]bd[elete][!]      *:bd* *:bdel* *:bdelete* *E516* 
:bd[elete][!] [N] 
       Unload buffer [N] (default: current buffer) and delete it from 
       the buffer list. If the buffer was changed, this fails, 
       unless when [!] is specified, in which case changes are lost. 
       The file remains unaffected. Any windows for this buffer are 
       closed. If buffer [N] is the current buffer, another buffer 
       will be displayed instead. This is the most recent entry in 
       the jump list that points into a loaded buffer. 
       Actually, the buffer isn't completely deleted, it is removed 
       from the buffer list |unlisted-buffer| and option values, 
       variables and mappings/abbreviations for the buffer are 
       cleared.
20

Если у вас есть несколько окон расщепленных в окне Vim затем: шд закрывает разделенное окно текущего файла ... поэтому я хотел бы использовать что-то более продвинутое:

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 
3

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

37

Как уже упоминалось, вы ищете : шд, однако это не полностью удалить буфер, он по-прежнему доступны:

: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 2 
:b 2 
E86: Buffer 2 does not exist 

Не зная о : м.т. прослушивают меня довольно долгое время.

5

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

-1

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

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

0

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

:map <F4> :bd<CR> 
Смежные вопросы