在 Vim 中以编程方式关闭多个缓冲区

Close Multiple Buffers Programatically in Vim

我正在尝试编写一个函数,允许我切换 TPope 的 Vim Fugitive git-log 查看器。

该插件允许您通过打开 git 个对象作为以 fugitive://

开头的缓冲区来查看项目的历史记录

我正在尝试在 vimscript 中编写一个函数,允许我在所有这些缓冲区打开时立即关闭它们。该功能目前看起来像这样,并且非常接近工作:

function! ToggleGLog()
    if buflisted(bufname('fugitive'))
      :cclose
      :bd fugitive*<C-a><cr>
    else
        Glog
    endif
endfunction
command! ToggleGLog :silent :call ToggleGLog()
nnoremap <silent> <leader>gl :ToggleGLog<CR>

我遇到的问题是函数的 <C-a><cr> 部分不起作用。通常,<C-a> 会扩展 * 选择器以匹配所有以“fugitive.”开头的缓冲区。

我该如何编写才能使那些缓冲区的名称自动扩展并且 :bd 命令将它们全部关闭?

下面的怎么样?

execute "normal! :bdelete fugitive*\<C-a>\<CR>"

normal 让 Vim 运行 右边的命令就像您输入的一样,包括像 <C-a> 这样的键。但由于后者有些特殊,需要解读;这就是 execute 在这里所做的。 (参见 :help normal 的结尾部分。)