将当前目录下的所有as文件加入缓冲区列表

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:将当前目录下的所有as文件加入缓冲区列表
  • 本文链接:http://zengrong.net/post/1427.htm

vim的缓冲区列表(buffer list)保存着打开过的文件集合。使用 :b filename 可以快速打开需要的文件,且支持文件名自动补全,为编辑提供方便。

如果所有源文件都加入到缓冲区列表中,在编辑源码的时候不就更方便了么?

使用 :badd 命令可以将一个文件加入到缓冲区,我写了3个函数来提供批量加入和文件搜索的功能:

  • GetFileList返回提供的路径(和子目录)下的所有as文件的列表;
  • EchoBaddList将提供的路径(和子目录)下的所有as文件输出成Vim支持的添加缓冲区列表语句,并输出到当前缓冲区中;使用这个函数,可以方便的编辑自己的Session文件;
  • BaddList则直接将提供的路径(和子目录)下的所有as文件加入到缓冲区列表。
\" 获取目录下的所有文件的列表
function! GetFileList(...)
    if exists(\'a:1\')
        let path = a:1
    else
        let path = glob(\"%:h\")
    endif
    if exists(\'a:2\')
        let ext = a:2
    else
        let ext = \"as\"
    endif
    let trueList = []
    \" 获取子目录中的文件列表
    let fileList = split(glob(path.\"/**/*.\".ext), \"\")
    for afile in fileList
        if isdirectory(afile)
        \" 排除目录
            continue    
        end
        call add(trueList, afile)
    endfor
    return trueList
endfunction

\" 输出buffer列表到当前缓冲区
function! EchoBaddList(...)
    let baddList = call(\"GetFileList\", a:000)
    for afile in baddList
        execute \'normal obadd \'.afile
    endfor
endfunction

\" 将path中的文件直接加入buffer列表
function! BaddList(...)
    let baddList = call(\"GetFileList\", a:000)
    for afile in baddList
        execute \'badd \'.afile
    endfor
endfunctio

运行一下看看 :call BaddList(\'src\')
再看看缓冲区是否被加入了: :ls