我在 Vim 中打开了几个文件,例如,运行
vim a/*.php
打开 23 个文件。
然后我进行编辑并运行以下两次
:q
这关闭了我所有的缓冲区。
如何在 Vim 中只关闭一个缓冲区?
vim -o a/*.php
(或 -O
以使用垂直窗口)在单独的 Vim 窗口中打开文件并避免缓冲区导航 - 这对于少数文件来说是一种很好的方法,但对于 23 个文件,它们只会每个有几行/列。
请注意:“w
in bw
不代表写入,而是代表擦除!”
更多来自手册:
:bd
卸载缓冲区 [N](默认:当前缓冲区)并将其从缓冲区列表中删除。如果缓冲区已更改,则会失败,除非指定 [!],在这种情况下更改将丢失。该文件不受影响。
如果您知道自己在做什么,您也可以使用 :bw
:bw
类似 |:bdelete|,但实际上是删除缓冲区。
如果前面的答案不明显:
:bd 将关闭当前缓冲区。如果您不想获取缓冲区列表。
:bd
仅关闭缓冲区,而(无论这意味着什么)而 :bw
也会清除所有变量并真正将其从 ls
缓冲区中消除。
使用 :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>
优于 vim 的 :bdelete 和 :bwipeout
关闭并移除缓冲区。在该窗口中显示另一个文件。如果您没有打开其他文件,请显示一个空文件。如果您决定在该窗口中编辑另一个文件,请不要留下无用的 [no file] 缓冲区。即使文件在多个窗口中打开也能正常工作。可以使用各种缓冲区浏览器和标签栏。
:bdelete 与 :bwipeout
Vim 有两个关闭缓冲区的命令::bdelete 和:bwipeout。前者从缓冲区列表中删除文件,清除其选项、变量和映射。但是,它仍保留在跳转列表中,因此 Ctrl-o 带您返回并重新打开该文件。如果这不是您想要的,请使用 :bwipeout 或 Bbye 的等价物 :Bwipeout 来使用 :bdelete。
coc-explorer
。 :)
怎么样
vim -O a a
这样,您可以在左侧编辑单个文件并在右侧导航整个目录......只是一个想法,而不是解决方案......
[编辑:这是一个愚蠢的建议,因为我对 Vim 还不够了解。请不要使用制表符代替缓冲区;选项卡是 Vim 的“窗口布局”]
也许切换到使用标签?
vim -p a/*.php
在选项卡中打开相同的文件
gt
和 gT
来回切换标签
:q
仅关闭当前标签
:qa
关闭一切并退出
:tabo
关闭除当前标签之外的所有内容
wildmenu
吗?它类似于 lustyjuggler(虽然更简单),但它是内置的(这对我来说很好,因为 lustyjuggler 需要 +ruby
,以及 ubuntu oneiric 船舶的默认 vim -ruby
)。
vim-nox
软件包支持 Ruby。
那些使用缓冲区或树导航插件(如 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
相同。您可以修改此功能以与您自己的配置集成。
:bw
,但我不知道,所以我想我会使用:bd
。w
是write
命令的缩写,此外没有提及任何“清除”。命令 (help write
) 的描述以“将整个缓冲区写入当前文件”开头。:help bw
你会看到bw
代表擦除。bw
命令中的w
意味着消灭他不是在谈论w
命令。他把这个警告放在那里,所以人们不认为bw
命令意味着缓冲区写入(它并不意味着缓冲区擦除。)