Закрыть файл, не выходя из приложения VIM? - PullRequest
249 голосов
/ 02 ноября 2008

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

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

Ответы [ 11 ]

327 голосов
/ 02 ноября 2008

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

:bd 
40 голосов
/ 02 декабря 2010

Как уже упоминалось, вы ищете : 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 долго жаловался на меня.

21 голосов
/ 14 ноября 2008

Если у вас есть несколько разделенных окон в вашем окне 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
17 голосов
/ 02 ноября 2008
:[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.
9 голосов
/ 02 ноября 2008

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

6 голосов
/ 07 ноября 2013

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

3 голосов
/ 28 марта 2010

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

2 голосов
/ 21 сентября 2012

Для этого есть плагин: bufkill (см. http://www.vim.org/scripts/script.php?script_id=1147)

Это добавляет BD и т. Д. Для удаления буфера без закрытия каких-либо разделений (как bd).

1 голос
/ 31 августа 2016

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

:map <F4> :bd<CR>
0 голосов
/ 28 октября 2014

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...