如何始终在状态栏下显示VIM缓冲区而不使用ls命令?

8
当我使用VIM和缓冲区时,要查看所有缓冲区的列表,我总是不得不输入:ls来查看所有缓冲区。
有没有办法让缓冲区始终显示在vim底部?
编辑: 所以基本上假设我在vim中打开了2个文件,如果我键入:ls,它会显示类似于以下内容
  1 #h   "IModuleTest.php" line 422
  3 %a   "~/.vimrc"        line 1

我不想每次都要输入命令来查看所有的文件,而是想随时看到它们,这样我就可以更快地在它们之间切换,而不必先看到缓冲区列表。


当然可以,但我仍然需要在所有的缓冲区之间切换才能找到我想要的那一个(假设我有10个缓冲区)。相比于通过:b <缓冲区编号>直接看到我想要的那个缓冲区的编号。 - CodeCrack
请查看:help wildmenu。另外,使用nnoremap gb :ls<cr>:b - romainl
3个回答

4

我喜欢这个插件"vim-bufferline"

首先,它会在命令行空闲3秒后出现在未使用的空间中。当我们输入冒号:(开始一个命令)时,它就会消失。

然后,在命令行上显示Vim中打开的所有缓冲区的列表,并突出显示光标所在的活动缓冲区。


2
有一些插件可以做到这一点,例如minibufexpl.vim
实际上,这个需求听起来有点奇怪。你知道像:buffer这样的命令也可以接受文件名,并自动完成它吗?!GVIM默认有一个Buffers菜单。许多用户还安装了像CtrlP、FuzzyFinder或Unite这样的插件,以快速定位缓冲区和文件。

这不就像minibufexpl.vim插件提供的功能吗?! - Ingo Karkat
我试图看看是否可以在没有插件的情况下实现这一点...但是我刚刚安装了它,它正在工作,但缓冲区显示在顶部。有没有办法将其移动到底部显示? - CodeCrack

0
Lua函数用于在状态栏中列出缓冲区名称,并突出显示活动的缓冲区。
vim.cmd('hi ActiveBuffer term=underline cterm=underline ctermfg=none ctermbg=none')   

function set_status(args)
       local buffs = {}
       local no_list_buffs = {['']=true, ['[Command Line]']=true}
       for _,v in pairs(vim.fn.getbufinfo({buflisted=1})) do
                local fname = vim.fn.fnamemodify(v.name, ":t")
                if(not no_list_buffs[fname]) then 
                    if(v.bufnr == args.buf) then
                        fname = '%#ActiveBuffer#'..fname..'%*'
                    end
                    table.insert(buffs, fname)
                end
        end
        vim.o.statusline = '%F%m %y%='..'<'..table.concat(buffs, ',')..'>'..' %c,%l/%L %P'
    end

使用autocmd来调用。
 vim.api.nvim_create_autocmd({'BufEnter'},
 { 
            group = vim.api.nvim_create_augroup('BufStatusLine', {}), 
            callback = set_status 
 })

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