【发布时间】:2010-09-20 08:24:08
【问题描述】:
我使用:e 和:w 命令来编辑和写入文件。我不确定是否有“关闭”命令可以在不离开 Vim 的情况下关闭当前文件?
我知道:q 命令可以用来关闭一个文件,但是如果是最后一个文件,Vim 也会被关闭;实际上在 Mac OS MacVim 确实退出了。只有 Vim 窗口关闭,我可以使用 Control-N 再次打开一个空白的 Vim 窗口。我希望 Vim 在空白屏幕上保持打开状态。
【问题讨论】:
标签: vim
我使用:e 和:w 命令来编辑和写入文件。我不确定是否有“关闭”命令可以在不离开 Vim 的情况下关闭当前文件?
我知道:q 命令可以用来关闭一个文件,但是如果是最后一个文件,Vim 也会被关闭;实际上在 Mac OS MacVim 确实退出了。只有 Vim 窗口关闭,我可以使用 Control-N 再次打开一个空白的 Vim 窗口。我希望 Vim 在空白屏幕上保持打开状态。
【问题讨论】:
标签: vim
查看Butane plugin 以在关闭缓冲区时保持窗口布局。
【讨论】:
在您的 .vimrc 文件中插入以下内容,然后按 F4,它将关闭当前文件。
:map <F4> :bd<CR>
【讨论】:
bufkill.vim 插件添加了BD 等,以删除缓冲区而不关闭任何拆分(如bd)。
【讨论】:
:bd 可以被映射。我将它映射到 F4, Shift-F4 如果我因为一些我不再想要的更改而需要强制关闭。
【讨论】:
如果你修改一个文件并且想要关闭它而不退出 Vim 并且不保存,你应该输入:bd!。
【讨论】:
如果您已经保存了最后一个文件,那么:enew 就是您的朋友(:enew! 如果您不想保存最后一个文件)。请注意,原始文件仍会在您的缓冲区列表中(可通过:ls 访问)。
【讨论】:
如果你的 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
【讨论】:
如前所述,您正在寻找: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——“除非你知道自己在做什么,否则不要使用它。”
我有同样的问题,所以我制作了插件。 这个插件替换 :q 等命令,然后防止窗口关闭。
如果您仍有问题,请尝试使用以下插件。 https://github.com/taka-vagyok/prevent-win-closed.vim
【讨论】:
:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
:bd[elete][!] [N]
卸载缓冲区 [N](默认值:当前缓冲区)并将其从
缓冲区列表。如果缓冲区已更改,则会失败,
除非指定了 [!],否则更改将丢失。
该文件不受影响。此缓冲区的任何窗口都是
关闭。如果缓冲区 [N] 是当前缓冲区,则另一个缓冲区
将改为显示。这是最近的条目
指向已加载缓冲区的跳转列表。
实际上,缓冲区并没有完全删除,而是被删除了
来自缓冲区列表 |unlisted-buffer|和选项值,
缓冲区的变量和映射/缩写是
清除。
【讨论】:
这将删除缓冲区(转换为关闭文件)
:bd
【讨论】: