我使用:e
和:w
命令来编辑和写文件。我不确定是否有“关闭”命令可以在不离开Vim的情况下关闭当前文件?
我知道:q
命令可以用来关闭文件,但如果它是最后一个文件,Vim也会关闭;实际上在Mac OS中,MacVim确实会退出。只有Vim窗口关闭了,我可以使用Control-N再次打开一个空的Vim窗口。我希望Vim保持打开状态并显示一个空白屏幕。
我使用: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
命令有这样的描述:"除非你知道自己在做什么,否则不要使用此命令。" - mato如果你在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
:
输入是有效的 :) 不过它只会在命令行中输入 call CleanClose(0)
,还需要按回车键才能执行。如何让 fc
直接运行命令而无需额外的回车键呢? - agentofuser:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516* :bd[elete][!] [N] 卸载缓冲区[N](默认:当前缓冲区)并从缓冲区列表中删除。如果更改了缓冲区,则此操作失败,除非指定[!],这样更改就会丢失。 文件不受影响。关闭该缓冲区的任何窗口。如果缓冲区[N]是当前缓冲区,则将显示另一个缓冲区。这是指向已加载缓冲区的跳转列表中最近的条目。 实际上,缓冲区并没有完全删除,而是从缓冲区列表|未列出缓冲区|和选项值、变量和映射/缩写中清除。
:enew
是您的朋友(如果您不想保存上一个文件,则使用:enew!
)。请注意,原始文件仍将在您的缓冲区列表中(可以通过:ls
访问该列表)。:bd!
。:bd
可以映射。我将其映射到 F4,如果因为某些变化我不再需要它,我会将其映射到 Shift-F4 以强制关闭。
在你的 .vimrc 文件中插入以下内容,按下 F4,即可关闭当前文件。
:map <F4> :bd<CR>
:enew
,因为我喜欢将缓冲区列在缓冲列表中 :) - Rytmis