Você instruiu o bash a usar o mecanismo interno de conclusão de arquivos para git
, em vez de chamar a função de conclusão externa que entende a sintaxe do comando git
. Há apenas um mecanismo de conclusão, não uma série de filtros. Se você quer uma série de filtros, você tem que codificar.
Felizmente, o script de conclusão git de 2,7 kLoC suporta padrões excluindo de git add
da maneira natural: adicione esses padrões a .gitignore
.
printf '%s\n' '*.cm[aiox]' '*.cmxa' '*.[ao]' >>.gitignore
Se você quiser excluir arquivos da git add
completion sem adicioná-los à lista de ignorados do git, acho que você terá que mergulhar no script de conclusão do git. _git_add
chamadas __git_complete_index_file
que chama __git_index_files
para gerar a lista de arquivos candidatos e, por sua vez, chama __git_ls_files_helper
, que chama git ls-files
com as opções que foram transmitidas até o fim de _git_add
. Então, em _git_add
você pode mudar
__git_complete_index_file "--others --modified --directory --no-empty-directory"
para adicionar algumas opções como --exclude=*.cm[aiox]
(cuidado com os problemas de citação: os curingas são eventualmente unidos no comando, então -x *.cm[aiox]
não funcionaria porque o padrão seria expandido no diretório atual).