Vejo :h :command-completion-custom
Podemos adaptar o último exemplo para concluir apenas os arquivos listados pelo git.
command! -nargs=1 -bang -complete=customlist,GitFindComplete
\ GitFind edit<bang> <args>
function! GitFindComplete(ArgLead, CmdLine, CursorPos)
let search_pattern = "*" . a:ArgLead . "*"
let shell_cmd = "git ls-files " . shellescape(search_pattern)
return split(system(shell_cmd), "\n")
endfunction
Agora você pode usar o preenchimento automático para abrir os arquivos listados pelo git:
:GitFind ome_f<Tab>
Observe que em uma função de conclusão personalizada, devemos fazer mais do que simplesmente listar os arquivos que podem ser concluídos. Também devemos filtrar a lista em relação ao argumento da linha de comando atual ArgLead
. Neste exemplo, solicitamos git
a filtragem para nós, passando o argumento entre *
caracteres curinga.