关闭文件而不退出VIM应用程序?

284

我使用:e:w命令来编辑和写文件。我不确定是否有“关闭”命令可以在不离开Vim的情况下关闭当前文件?

我知道:q命令可以用来关闭文件,但如果它是最后一个文件,Vim也会关闭;实际上在Mac OS中,MacVim确实会退出。只有Vim窗口关闭了,我可以使用Control-N再次打开一个空的Vim窗口。我希望Vim保持打开状态并显示一个空白屏幕。

12个回答

392

这将删除缓冲区(相当于关闭文件)

:bd 

7
对于OP所问的问题,你的回答比我的好,尽管我更倾向于使用:enew,因为我喜欢将缓冲区列在缓冲列表中 :) - Rytmis
2
当我这样做时,vim会显示第一个缓冲区,但我仍然可以访问缓冲区。 - Martin Andersson
22
@Martin,要完全删除缓冲区,请使用**:bw**命令。 - sebnow

53

如前所述,你需要使用: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 是什么让我很苦恼。


6
请记住,VIM的帮助文档对于:bw命令有这样的描述:"除非你知道自己在做什么,否则不要使用此命令。" - mato

24

如果你在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

13
这段代码是做什么的? - Ev Dolzhenko
1
你可能想在调用后加上<CR>以实际执行命令。 - dma
2
@dolzenko 它将 'fc' 和 'fq' 在正常模式中映射为可选择性地保存当前缓冲区,然后在删除原始缓冲区之前切换到一个新的缓冲区。这样可以保留您设置的任何分割窗口。 - dma
好的,没有使用 : 输入是有效的 :) 不过它只会在命令行中输入 call CleanClose(0),还需要按回车键才能执行。如何让 fc 直接运行命令而无需额外的回车键呢? - agentofuser
2
不要重新映射"f"……它实际上非常有用。有了这个映射,您永远无法为"c"或"q"向前"查找"。 - tandrewnichols
显示剩余2条评论

18
:[N]bd[elete][!]                        *:bd* *:bdel* *:bdelete* *E516*
:bd[elete][!] [N]
                卸载缓冲区[N](默认:当前缓冲区)并从缓冲区列表中删除。如果更改了缓冲区,则此操作失败,除非指定[!],这样更改就会丢失。
                文件不受影响。关闭该缓冲区的任何窗口。如果缓冲区[N]是当前缓冲区,则将显示另一个缓冲区。这是指向已加载缓冲区的跳转列表中最近的条目。
                实际上,缓冲区并没有完全删除,而是从缓冲区列表|未列出缓冲区|和选项值、变量和映射/缩写中清除。

11
如果您已经保存了最后一个文件,那么:enew是您的朋友(如果您不想保存上一个文件,则使用:enew!)。请注意,原始文件仍将在您的缓冲区列表中(可以通过:ls访问该列表)。

8
如果你修改了一个文件,想要在不退出Vim并且不保存的情况下关闭它,你应该输入:bd!

4

:bd 可以映射。我将其映射到 F4,如果因为某些变化我不再需要它,我会将其映射到 Shift-F4 以强制关闭。


4

bufkill.vim插件添加了BD等命令,可以在不关闭任何分屏的情况下删除缓冲区(与单独使用bd命令不同)。


3

在你的 .vimrc 文件中插入以下内容,按下 F4,即可关闭当前文件。

:map <F4> :bd<CR>

0

查看Butane插件,以在关闭缓冲区时保留窗口布局。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接