Na maioria das vezes, gosto da combinação de (por um lado) executar zsh em uma variante BSD no iTerm, mas (por outro lado) ter a experiência do macOS disponível para aplicativos que não são executados ou não geram tanto sentido para executar em um terminal.
Mas uma coisa que me deixa louco são os .DS_Store
arquivos horríveis que o macOS despeja em todo o lugar.
Posso configurar o zsh para que, se eu digitar (por exemplo) nvim *
tab, o *
seja expandido sem incluir nenhum arquivo que eu queira evitar? (Isso pode incluir .DS_Store
, Icon?
e potencialmente outros que não consigo pensar agora.)
Não estou perguntando como posso construir um padrão no local que exclua determinados arquivos (exemplos aqui , aqui e aqui ), mas como posso fazer com que todos os globs sempre excluam determinados arquivos.
Você não pode personalizar o globbing, exceto pela
dot_glob
opção. Esse é um dos poucos recursos que existe no ATT ksh e no bash, mas não no zsh. Assimecho *
sempre mostraráIcon1
.Você pode ignorar padrões na conclusão, mas fica complicado quando curingas estão envolvidos. Vamos começar com algo simples: a conclusão não envolve curingas. Com o seguinte
.zshrc
arquivo , como.DS_Store
eIcon1
não será oferecido para conclusão, a menos que não haja correspondências de outra forma.Explicação: Eu defino estilos de conclusão :
_complete
), em oposição, por exemplo, à correção ou_ingore
.rm
. Para orm
comando, o snippet acima define uma lista de ignorados vazia, que substitui o padrão._files
ou da tag_globbed-files
).Esses estilos não se aplicam à expansão curinga. Por padrão, a expansão curinga em Tabignora o código de conclusão. Para fazê-lo usar o código de conclusão, especificamente o
_expand
completer , você precisa vincular Tabecomplete-word
usar o_expand
completer, que usa aexpansions
tag.Com isso ,
.zshrc
em um diretório contendo.DOH
,.DS_Store
and.zshrc
,echo .*
Tabpercorre.DOH
,.zshrc
e.DOH .DS_Store .zshrc
..*
Graças aoignored-patterns
estilo naexpansions
tag,.DS_Store
é ignorado ao percorrer as expansões individuais. Há umaall-expansions
tag que se aplica ao expandir para a lista de correspondências, mas infelizmente não suportaignored-patterns
. (Na verdade, meio que faz, mas de uma maneira inútil: pode ser usado para remover toda a lista de correspondências, não para remover elementos individuais dela.)A única maneira que encontrei para filtrar correspondências da lista de todas as expansões é corrigir a
_expand
função .Com este patch e o
.zshrc
acima, aall-expansions
tag faz com.DS_Store
que seja ignorada porecho .*
Tab.Cuidado que eu testei apenas minimamente este patch. Pode quebrar outras coisas. Pode não funcionar em algumas configurações. Pode não citar nomes de arquivo corretamente.