De manera predeterminada, el motor de finalización de zsh solo intenta agregar algo a lo que escribe. Lo configuró para intentar agregar un prefijo también. El motor de configuración de finalización interactiva simple ( compinstall
) ofrece esto en "control de coincidencia → finalización de subcadena". Esto inserta una línea como esta en su .zshrc
:
zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'
La zstyle
configuración integrada (en su mayoría) de finalización establece. El matcher-list
estilo de finalización es una lista de formas de intentar en sucesión, deteniéndose cuando hay al menos una coincidencia. La cadena vacía significa la finalización predeterminada (solo sufijos). El conjuro de control de coincidencial:|=* r:|=*
significa probar una coincidencia de prefijo *
y una coincidencia de sufijo *
, es decir, cualquier prefijo y sufijo.
Puede prohibir prefijos que comiencen por _
completo. Esto todavía permite completar palabras que comienzan con _
, y completar agregando un prefijo, pero el prefijo puede no comenzar con _
.
zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'
Esto se aplica a todas las terminaciones, no solo a las terminaciones de nombres de comandos. No sé cómo restringir esto a los nombres de comandos.
Debería haber una manera de excluir con mayor precisión los nombres de comandos que comienzan con _
, pero no sé cómo. Un primer comienzo es con el ignored-patterns
estilo de finalización.
zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'
Esto excluye las coincidencias que comienzan con _
; sin embargo, si no hay coincidencias, zsh intenta nuevamente sin las reglas de ignorar. Lo bueno de esto es que si el comando comenzó con un guión bajo en primer lugar, se completará en este segundo paso. La parte mala es que zsh intentará agregar un guión bajo de todos modos si no hay coincidencias, por lo que si tiene vi
y view
no vim
presionando Tabdespués vi
se ofrecerá vi
y view
no _vim
, pero si escribe, vim
se completará la oferta _vim
.