VIM:如何在当前缓冲区中打开新文件?

10

默认情况下,VIM 的:e命令将使用指定的文件创建一个新的缓冲区,而当前缓冲区则会继续存在。这会导致缓冲区数量变得非常大(如果使用某些缓冲区显示插件,例如流行的minibufexplorer,那么这并不方便)。 是否可能修改 VIM 以便 :e 命令将重用当前缓冲区?毕竟,如果我需要两个缓冲区,我总是可以通过:enew命令来创建第二个缓冲区。

3个回答

14

你不能“重新使用”一个缓冲区,在vim中,缓冲区是加载到内存中进行编辑的文件。

您可以删除当前缓冲区然后打开一个新缓冲区,这样就可以保留您的缓冲区计数:

:bd!|e /path/file

请注意,使用 ! 将会放弃对当前缓冲区所做的更改。


1
非常感谢!VIM 中有关于 '|' 符号的文档吗?我不知道我可以像这样链接命令。 - grigoryvp

11
:bd!|e file

使用最直观的方法,但是如果您有分屏,这将会关闭您的窗口。因此...

function! ReplaceBuffer(bang, newfile)
  let curbuf = bufnr('%')
  exec "e " . a:newfile
  exec "bd" . a:bang . " " . curbuf
endfunction
command! -nargs=1 -complete=file -bang -bar BDE call ReplaceBuffer('<bang>', <f-args>)

那么你可以这样做

:BDE ~/.vimrc

或者

:BDE! ~/.vimrc

加载你的.vimrc并关闭当前缓冲区,而不影响窗口。


好的提醒,:bd!|e file 可以关闭所有分屏!我一直在寻找一种能够保留分屏布局的方法。 - jazzyfresh
@jazzyfresh,尝试一下这个解决方案,它将保留分割窗口:https://dev59.com/KmMm5IYBdhLWcg3wburb#58740649 - wisbucky

7

:e thefile | bd#

这个解决方案的优点是它可以保留窗口。

  1. 在一个新的缓冲区中打开“thefile”
  2. 删除最近的缓冲区( # 是上一个缓冲区)

1
如果没有最近的缓冲区,它将抛出一个错误。 - Haris Muzaffar
我打开了两个窗口。:e filepath | bd# 销毁了我的另一个窗口并打开了文件,因此窗口没有被保留。从命令中删除 d# 可以保留窗口。 - Unknow0059

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接