当只有一个缓冲区时,使用 `:q` 而不是 `:bdelete` 命令来退出 VIM 编辑器。

3
我希望使用一个快捷方式 (,q) 来删除我不需要的缓冲区,但当当前缓冲区是唯一列出的缓冲区时,我想使用相同的快捷方式来退出vim。
我目前正在使用以下函数:
function! MyClose()
    " :q if at most one buffer is loaded
    " :bdelete otherwise
    let bufcount = len(filter(range(1,bufnr('$')), 'buflisted(v:val)==1'))
    if bufcount < 2
        exe ":q"
    else
        exe ":bdelete"
    endif
endfunction

然后

nnoremap <leader>q :call MyClose()<cr>

但我感觉自己做得不太对。

  • 有没有更好的方法来计算列出的缓冲区?
  • 有没有更好的方法来实现这个功能?
1个回答

0

你是对的,你可以使用

:help tabpagebuflist

获取所有现有缓冲区的列表,请执行以下操作:

tablist = []
for i in range(tabpagenr('$'))
   call extend(tablist, tabpagebuflist(i + 1))
endfor

在这种情况下,您只需要检查当前选项卡上的缓冲区,因为执行 :q 命令只会关闭该选项卡。

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