:b[uffer] é usado apenas para acessar buffers abertos. O "escopo" de sua conclusão não está restrito a "determinados diretórios", mas aos buffers em sua lista de buffers / lista de argumentos. Você não pode usar esse comando para abrir um arquivo que ainda não foi aberto.
:e[dit] é usado para editar um arquivo e sua conclusão é "escopo" para os arquivos e diretórios diretamente sob o diretório de trabalho do Vim. Você pode limitar a lista de conclusão com a opção wildignore ( :help 'wildignore' ) ou usando o incrível curinga ** ( :help starstar ).
Quando você usa :e para editar um arquivo que já está na lista de buffers / lista de argumentos, o Vim não cria um novo buffer, mas muda para o buffer existente, agindo efetivamente como :b .
Então… Parece que você está um pouco confuso sobre o comportamento de :b e que você está simplesmente procurando por :e file<Tab> .