conclusão da guia ZSH: somente arquivos completos e não binários

5

É possível fazer um arquivo de conclusão do zsh personalizado, então ao clicar na guia para nomes de arquivos, ele evita a conclusão dos binários? Por exemplo, eu tenho 2 arquivos, myprogram.c e myprogram, o binário, é possível assim quando eu faço vim myprog (tab) ele automaticamente conclui para myprogram.c, não myprogram? Obrigado antecipadamente!

    
por bollovan 18.06.2011 / 15:29

2 respostas

4

Você pode ignorar alguns padrões nas conclusões ajustando os estilos de conclusão com o zstyle integrado . Existem exemplos no guia zsh .

Por exemplo, para ignorar *.o arquivos ao completar arquivos para editar com o vim, você pode colocar isso no seu .zshrc :

zstyle ':completion:*:*:vim:*:*files' ignored-patterns '*.o'

Isso não funcionará para excluir executáveis de uma maneira útil. Você pode excluir *~*.* , ou mais precisamente (|*/)[^/.]## , mas isso exclui todo nome de arquivo que não contenha . , incluindo scripts e diretórios ainda piores. Tanto quanto eu sei, o mecanismo de ignorar a conclusão não pode verificar a existência ou o tipo de arquivos, apenas corresponde a padrões de texto.

    
por 18.06.2011 / 18:08
2

Você poderia, claro, mexer com isso para que funcionasse em qualquer pasta ou conjunto de arquivos, mas primeiro você deve entender o motivo pelo qual ele não faz isso agora.

No linux, as extensões de arquivo não importam, a única coisa que importa é o bit de execução. As coisas podem ser executadas, sejam elas realmente binárias ou apenas texto na forma de um script. Seus critérios de "não binários" não combinam bem com as distinções feitas pelo Linux sobre o que um arquivo é ou não é.

Dito isto, não seria muito difícil escrever uma função de conclusão customizada para substituir a conclusão glob do nome do arquivo para um determinado comando que lista todos os arquivos, mas exclui aqueles que possuem versões '.c'. Isso exigiria alguma sobrecarga que diminuiria um pouco a conclusão da tabulação.

    
por 18.06.2011 / 18:24