我使用 :e
和 :w
命令来编辑和写入文件。我不确定是否有“关闭”命令可以在不离开 Vim 的情况下关闭当前文件?
我知道 :q
命令可以用来关闭一个文件,但如果它是最后一个文件,Vim 也会被关闭;实际上在 Mac OS MacVim 确实退出了。只有 Vim 窗口关闭,我可以使用 Control-N 再次打开一个空白的 Vim 窗口。我希望 Vim 在空白屏幕上保持打开状态。
这将删除缓冲区(转换为关闭文件)
:bd
如前所述,您正在寻找 :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
困扰了我很长一段时间。
:bw
的说明是这样的——“除非你知道自己在做什么,否则不要使用它。”
如果你的 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
:[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.
如果您已经保存了最后一个文件,那么 :enew
就是您的朋友(如果您不想保存最后一个文件,则 :enew!
)。请注意,原始文件仍会在您的缓冲区列表中(可通过 :ls
访问的那个)。
如果您修改一个文件并想在不退出 Vim 且不保存的情况下关闭它,您应该输入 :bd!
。
:bd
可以映射。我将它映射到 F4, Shift-F4 如果我因为一些我不再想要的更改而需要强制关闭。
在 .vimrc 文件中插入以下内容,然后按 F4,它将关闭当前文件。
:map <F4> :bd<CR>
我有同样的问题,所以我做了插件。这个插件替换 :q 和其他命令然后防止窗口关闭。
如果您仍然有问题,请尝试使用以下插件。 https://github.com/taka-vagyok/prevent-win-closed.vim