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

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

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

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

  • GetFileList返回提供的路径(和子目录)下的所有as文件的列表;
  • EchoBaddList将提供的路径(和子目录)下的所有as文件输出成Vim支持的添加缓冲区列表语句,并输出到当前缓冲区中;使用这个函数,可以方便的编辑自己的Session文件;
  • BaddList则直接将提供的路径(和子目录)下的所有as文件加入到缓冲区列表。
 1" 获取目录下的所有文件的列表
 2function! GetFileList(...)
 3    if exists('a:1')
 4        let path = a:1
 5    else
 6        let path = glob("%:h")
 7    endif
 8    if exists('a:2')
 9        let ext = a:2
10    else
11        let ext = "as"
12    endif
13    let trueList = []
14    " 获取子目录中的文件列表
15    let fileList = split(glob(path."/**/*.".ext), "\")
16    for afile in fileList
17        if isdirectory(afile)
18        " 排除目录
19            continue    
20        end
21        call add(trueList, afile)
22    endfor
23    return trueList
24endfunction
25
26" 输出buffer列表到当前缓冲区
27function! EchoBaddList(...)
28    let baddList = call("GetFileList", a:000)
29    for afile in baddList
30        execute 'normal obadd '.afile
31    endfor
32endfunction
33
34" 将path中的文件直接加入buffer列表
35function! BaddList(...)
36    let baddList = call("GetFileList", a:000)
37    for afile in baddList
38        execute 'badd '.afile
39    endfor
40endfunctio

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