Finalización de la pestaña ZSH: solo files completos y no binarys

¿Es posible crear un file de finalización de zsh personalizado, de modo que cuando se toca la pestaña de nombres de files, se evite completar los files binarys? Por ejemplo, tengo 2 files, myprogram.c y myprogram, el binary, ¿es posible así que cuando lo hago vim myprog (pestaña) automáticamente lo completa en myprogram.c, no en myprogram? ¡Gracias por adelantado!

Solutions Collecting From Web of "Finalización de la pestaña ZSH: solo files completos y no binarys"

Puede ignorar algunos patrones en las terminaciones ajustando los styles de finalización con el zstyle incorporado . Hay ejemplos en la guía de zsh .

Por ejemplo, para ignorar files *.o al completar files para editar con vim, puede poner esto en su .zshrc :

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

Esto no funcionará para excluir ejecutables de una manera útil. Puede excluir *~*.* , O más precisamente (|*/)[^/.]## , pero esto excluye todos los nombres de file que no contengan a . , incluyendo scripts e incluso directorys peores. Hasta donde yo sé, el mecanismo de ignorar la finalización no puede verificar la existencia o el tipo de files, solo coincide con los patrones de text.

Por supuesto, podría jugar con esto para que funcionase para cualquier carpeta o set de files determinado, pero primero debe comprender la razón por la que ahora no funciona.

En Linux, las extensiones de file no importan, lo único que importa es el bit de ejecución. Las cosas se pueden ejecutar si son realmente binarias o simplemente text en forma de guión. Sus criterios de "no binarys" no coinciden con las distinciones hechas por Linux sobre qué es o no es un file.

Una vez dicho esto, no sería demasiado difícil escribir una function de finalización personalizada para replace el nombre completo de file glob para un command dado que enumeraría todos los files pero excluiría los que tienen versiones '.c'. Requeriría una sobrecarga que ralentizaría un poco la finalización de la pestaña.