我在Vim中打开了几个文件,例如,运行
vim a/*.php
打开23个文件。
然后我进行编辑并运行以下两次
:q
关闭所有缓冲区。
如何在Vim中只关闭一个缓冲区?
答案 0 :(得分:505)
提醒一句:“w不代表写作,而是代表wipeout!”
更多来自手册:
<强>:BD 强>
卸载缓冲区[N](默认值:当前 缓冲区)并从中删除 缓冲区列表。如果缓冲区已更改,则会失败, 除非指定[!],否则更改为 丢失。 该文件不受影响。
如果您知道自己在做什么,也可以使用:bw
<强>:BW 强>
喜欢|:bdelete |,但确实删除了 缓冲液中。
答案 1 :(得分:341)
如果以前的答案没有明白这一点:
:bd 将关闭当前缓冲区。如果您不想获取缓冲区列表。
答案 2 :(得分:93)
使用检查您的缓冲区ID :缓冲器
你会看到那里的缓冲区列表
1 a.php
2 b.php
3 c.php
如果你想从缓冲区中删除b.php
:2bw
如果要删除/关闭所有缓冲区
:1,3bw
答案 3 :(得分:39)
不是浏览:ls命令的输出,而是通过指定数字来删除(卸载,擦除...)缓冲区,我发现使用文件名通常更有效。
例如,在我打开几个.txt文件以刷新我的一些细节的记忆之后..复制并粘贴几行文本以用作各种类型的模板......等等我输入以下内容:
:bd txt <Tab>
请注意,匹配的字符串不必位于文件名的开头。
上面显示了与屏幕底部的“txt”匹配的文件名列表,并保留了我最初输入的:bd命令,未完成,准备完成。
以下是一个例子:
doc1.txt doc2.txt
:bd txt
我可以在'txt'位上退格并键入我想要删除的文件名,但这变得非常方便的是我不必:如果我第二次点击Tab键,Vim会自动第一场比赛完成我的命令:
:bd doc1.txt
如果我想摆脱这个特定的缓冲区,我只需要按Enter键。
如果我要删除的缓冲区碰巧是第二个(第三个......等)匹配,我只需要继续按Tab键使my:bd命令循环遍历匹配列表。
当然,这个方法也可以用来通过以下命令切换到给定的缓冲区:b ..:sb .. etc。
当设置'隐藏'Vim选项时,此方法特别有用,因为缓冲区列表可能很快变得非常大,覆盖多个屏幕,并且很难找到我正在寻找的特定缓冲区。
要充分利用此功能,最好阅读以下Vim帮助文件并相应调整Tab命令行完成的行为,以便最适合您的工作流程:
:help wildmode
我上面描述的行为来自以下设置,为了模仿bash完成,我为了一致性而选择这个设置:
:set wildmode=list:longest,full
与使用缓冲区编号相反,这种方法的优点是我通常至少记住给定文件名的一部分,让我直接定位缓冲区,而不必通过:ls命令首先查找它的编号。 / p>
答案 4 :(得分:35)
使用:
:ls
- 列出缓冲区:bd#n
- 关闭缓冲区,其中#n是缓冲区编号(使用ls
获取缓冲区)示例:
删除缓冲区2:
:bd2
答案 5 :(得分:14)
您也可以将下一个和上一个映射到功能键,使缓冲区循环变得轻而易举
map <F2> :bprevious<CR>
map <F3> :bnext<CR>
来自我的vimrc
答案 6 :(得分:1)
怎么样
vim -O a a
通过这种方式,您可以编辑左侧的单个文件并导航右侧的整个目录... 只是一个想法,而不是解决方案......
答案 7 :(得分:1)
[编辑:这是一个愚蠢的建议,因为我不太了解Vim。请不要使用制表符而不是缓冲区;标签是Vim的“窗口布局”]
也许切换到使用标签?
vim -p a/*.php
在标签
gt
和gT
来回切换标签
:q
仅关闭当前标签
:qa
关闭所有内容并退出
:tabo
会关闭除当前标签之外的所有内容
答案 8 :(得分:1)
那些使用缓冲区或树导航插件的人,比如Buffergator或NERDTree,需要在销毁当前缓冲区之前切换这些拆分 - 否则你会将你的拆分发送到wonkyville
我用:
"" Buffer Navigation
" Toggle left sidebar: NERDTree and BufferGator
fu! UiToggle()
let b = bufnr("%")
execute "NERDTreeToggle | BuffergatorToggle"
execute ( bufwinnr(b) . "wincmd w" )
execute ":set number!"
endf
map <silent> <Leader>w <esc>:call UiToggle()<cr>
该列表中的“NERDTreeToggle
”与键入:NERDTreeToggle
相同。您可以修改此功能以与您自己的配置集成。
答案 9 :(得分:1)
如果要关闭缓冲区而不破坏窗口布局(基于拆分的当前布局),则可以使用bbye之类的插件。基于此,您可以使用
:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)
或者只需在您的.vimrc
中创建一个映射即可,例如
:nnoremap <Leader>q :Bdelete<CR>
- 关闭并删除缓冲区。
- 在该窗口中显示另一个文件。
- 如果没有其他文件打开,请显示一个空文件。
- 如果您决定在该窗口中编辑另一个文件,请不要使用无用的[no file]缓冲区。
- 即使一个文件在多个窗口中打开也可以工作。
- 可以使用各种缓冲区浏览器和标签栏正常工作。
Vim有两个用于关闭缓冲区的命令:
:bdelete
和:bwipeout
。前者从缓冲区列表中删除文件,清除其选项,变量和映射。但是,它仍保留在跳转列表中,因此Ctrl-o
将带您返回并重新打开文件。如果那不是您想要的,请使用:bwipeout
或Bbye等效的:Bwipeout
。