我通过在 Vim 中运行以下命令打开多个文件:
vim a/*.php
打开了23个文件。
然后,我进行了编辑并运行了以下代码两次:
:q
如何在Vim中关闭单个缓冲区,而不是关闭所有缓冲区?
来自手册的更多内容:
:bd
卸载缓冲区[N](默认:当前缓冲区)并从缓冲区列表中删除它。如果缓冲区已更改,则此操作失败,除非指定了[!],在这种情况下,更改将丢失。 文件保持不变。
如果你知道你在做什么,你也可以使用 :bw
:bw
类似于|:bdelete|,但真正删除缓冲区。
一个警告:“bw 中的 w 不代表写入,而是表示抹除!”
:bw
,但我不知道,所以我猜我会使用:bd
。 - jberrymanhelp write
)以“将整个缓冲区写入当前文件”开头。 - Armen Michaeli:help bw
,您将看到bw
代表删除。 - noarkbw
命令中的 w
表示擦除,而不是 w
命令。他在那里加了这个警告,以便人们不会认为 bw
命令表示缓冲区写入(实际上它并不是,它表示缓冲区擦除)。 - John:bd
可能更为有效。 - Pharaun:bd
只是关闭缓冲区,而 :bw
则会清除所有变量并将其从缓冲区中彻底删除(不管这句话什么意思)。 - RedX使用:buffers命令检查您的缓冲区id。
您将在那里看到缓冲区列表,例如:
1 a.php
2 b.php
3 c.php
如果您想从缓冲区中删除 b.php
:2bw
如果你想要移除/关闭所有的缓冲区
:1,3bw
与其浏览:ls命令的输出并通过指定编号来删除(卸载、清除..)缓冲区,我发现使用文件名通常更有效。
例如,当我打开一些.txt文件以刷新对某些细节的记忆后..复制和粘贴几行文本作为模板等等。我将键入以下命令:
:bd txt <Tab>
请注意,匹配的字符串不一定要在文件名的开头。
以上显示了在屏幕底部匹配'txt'的文件名列表,并保持我最初输入的:bd命令不变,以备完成。
这里是一个例子:
doc1.txt doc2.txt
:bd txt
我可以退格删除'txt',然后键入我想要删除的文件名,但真正方便的是我不必这样做:如果我第二次按Tab键,Vim会自动完成我的命令与第一个匹配项:
:bd doc1.txt
如果我想要摆脱这个特定的缓冲区,我只需要按Enter键。
如果我想要删除的缓冲区恰好是第二个(第三个..等),我只需要不断按Tab键来使我的:bd命令循环遍历匹配列表。
当然,这种方法也可以用于通过:b.. :sb..等命令切换到给定的缓冲区。
当设置了'hidden' Vim选项时,采用这种方法特别有用,因为缓冲区列表可能会变得非常大,覆盖多个屏幕,使得很难找到我正在寻找的特定缓冲区。
为了充分利用这个功能,最好阅读下面的Vim帮助文件,并相应地调整Tab命令行完成的行为,以最适合您的工作流程:
:help wildmode
上述行为是由下面这个设置引起的,我选择了这个设置以保持一致性,以模拟bash完成:
:set wildmode=list:longest,full
与使用缓冲区号相比,这种方法的优点在于我通常记得给定文件名的一部分,使我可以直接定位缓冲区,而不必先通过 :ls 命令查找其编号。
使用:
:ls
- 列出缓冲区:bd#n
- 关闭编号为 #n 的缓冲区(使用 ls
命令获取编号)示例:
删除第二个缓冲区:
:bd2
你也可以将next和previous映射到功能键,使得在缓冲区之间轻松切换成为可能。
map <F2> :bprevious<CR>
map <F3> :bnext<CR>
来自我的vimrc配置文件
如果你想在不破坏窗口布局(当前基于分割的布局)的情况下关闭缓冲区,你可以使用像bbye这样的插件。基于此,你只需使用以下命令:
:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)
.vimrc
中创建一个映射,以便更方便地访问,例如::nnoremap <Leader>q :Bdelete<CR>
来自插件文档:
来自插件文档:
Vim有两个关闭缓冲区的命令:
:bdelete
和:bwipeout
。前者从缓冲区列表中移除文件,清除其选项、变量和映射。然而,它仍然存在于跳转列表中,所以按下Ctrl-o
可以返回并重新打开文件。如果这不是你想要的,使用:bwipeout
或Bbye的等效命令:Bwipeout
来替代:bdelete
。coc-explorer
配合使用。 :) - Ranel Padon[编辑:这是我还不太熟悉Vim时的一个愚蠢建议。请不要使用选项卡来代替缓冲区;选项卡是Vim的“窗口布局”]
也许可以考虑使用选项卡?
vim -p a/*.php
在选项卡中打开相同的文件
gt
和 gT
在选项卡之间切换
:q
仅关闭当前选项卡
:qa
关闭所有选项卡并退出
:tabo
关闭除当前选项卡外的所有选项卡
wildmenu
吗?它类似于lustyjuggler(虽然更简单),但它是内置的(这对我来说很好,因为lustyjuggler需要+ruby
,而ubuntu oneiric的默认vim则使用-ruby
)。 - Natevim-nox
软件包支持Ruby。 - Leonid Shevtsovvim -O a a
使用缓冲区或树形导航插件(如Buffergator或NERDTree)的用户,在销毁当前缓冲区之前需要切换这些分割窗口,否则您将会把它们弄乱。
我使用:
"" 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
相同。您可以修改此函数以与您自己的配置集成。
vim -o a/*.php
(或-O
以使用垂直窗口)在单独的 Vim 窗口中打开文件,避免缓冲区导航。这是一种适用于仅几个文件的好方法,但对于23个文件而言,它们每个文件只有几行/列。 - Cascabel