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


258

我使用:e:w命令来编辑和写入文件。我不确定是否有“关闭”命令来关闭当前文件而不离开Vim?

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

Answers:


343

这将删除缓冲区(转换为关闭文件)

:bd 

6
尽管我倾向于使用:enew,但您对OP的要求比我的要好,因为我喜欢在缓冲区列表中添加缓冲区。:)
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一段时间以来,我都不了解我。


3
请记住,VIM的帮助是这样说的:bw:“除非您知道自己在做什么,否则请不要使用它。”
mato 2015年

22

如果您的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

12
现在,此代码段的作用是什么?
dolzenko 2010年

1
您可能希望在调用之后使用<CR>来实际执行命令。
dma

2
@dolzenko在正常模式下将“ fc”和“ fq”映射为可选地保存当前缓冲区,然后在删除原始缓冲区之前切换到新缓冲区。这将保留您已设置的所有拆分。
dma

似乎是个好主意。但是,当我尝试它时,出现以下错误消息:“无法重新定义功能CleanClose:它正在使用中”
jononomo 2012年

2
不要重新映射“ f”。。。“ f”实际上是超级有用的。使用此映射,您将永远无法“找到”“ c”或“ q”。
tandrewnichols's

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

9

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


6

如果您修改文件并要关闭它而不退出Vim且不保存,则应输入:bd!


3

:bd可以被映射。我映射它F4Shift- F4如果我需要强制关闭,因为某些变化我不再想的。


2

所述bufkill.vim插件添加BD等,删除缓冲器而不关闭任何拆分(如bd)将单独。


1

将以下内容插入您的.vimrc文件,然后按F4,将关闭当前文件。

:map <F4> :bd<CR>


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.