我在 Vim 中打开了几个文件,例如,运行
vim a/*.php
打开 23 个文件。
然后我进行编辑并运行以下两次
:q
这关闭了我所有的缓冲区。
如何在 Vim 中只关闭一个缓冲区?
如果前面的答案不明显:
:bd将关闭当前缓冲区。如果您不想获取缓冲区列表。
使用 :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
获取它)例子:
删除缓冲区 2:
:bd2
您也可以将下一个和上一个映射到功能键,让循环通过缓冲区变得轻而易举
map <F2> :bprevious<CR>
map <F3> :bnext<CR>
来自我的 vimrc
如果您想在不破坏窗口布局的情况下关闭缓冲区(当前布局基于拆分),您可以使用像bbye这样的插件。基于此,您可以使用
:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)
或者只是在您的中创建一个映射.vimrc
以便于访问,例如
:nnoremap <Leader>q :Bdelete<CR>
从插件的文档中:
- 关闭并移除缓冲区。
- 在该窗口中显示另一个文件。
- 如果您没有打开其他文件,请显示一个空文件。
- 如果您决定在该窗口中编辑另一个文件,请不要留下无用的 [no file] 缓冲区。
- 即使文件在多个窗口中打开也能正常工作。
- 可以使用各种缓冲区浏览器和标签栏。
从插件的文档中:
Vim 有两个关闭缓冲区的命令:
:bdelete
和:bwipeout
. 前者从缓冲区列表中删除文件,清除其选项、变量和映射。但是,它仍保留在跳转列表中,因此Ctrl-o
带您返回并重新打开该文件。如果这不是您想要:bwipeout
的,:Bwipeout
请在您使用:bdelete
.
[编辑:这是一个愚蠢的建议,因为我对 Vim 还不够了解。请不要使用制表符代替缓冲区;选项卡是 Vim 的“窗口布局”]
也许切换到使用标签?
vim -p a/*.php
在选项卡中打开相同的文件
gt
并gT
来回切换标签
:q
仅关闭当前选项卡
:qa
关闭一切并退出
:tabo
关闭除当前选项卡之外的所有内容
怎么样
vim -O a a
这样,您可以在左侧编辑单个文件并在右侧导航整个目录......只是一个想法,而不是解决方案......
那些使用缓冲区或树导航插件(如 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
。您可以修改此功能以与您自己的配置集成。