Autocompletar estilo XCode Command-T para zsh

Autocompletar estilo XCode Command-T para zsh

Acabo de empezar a usar el complemento Command-T para vim y es fantástico. En caso de que no hayas oído hablar de él, te permite escribir algo como esto:

Sb

para seleccionar Something.hs-boot de la lista

src/project/Control/Whatever/Foobs.hs
src/project/Control/Whatever/Something.hs-boot
src/project/Control/Whatever/Something.hs

Etcétera.

Me preguntaba si podría usar un estilo de autocompletado similar con zsh. Entiendo que la finalización del shell no podría ser tan extensa como la finalización de vim porque la finalización del shell probablemente no debería buscar en todo el sistema cada vez que escribes una letra, pero ¿existe algún tipo de finalización similar en la que al menos pueda tipo

s/p/c/w/Sb<tab>

y conseguir un efecto similar al anterior?

Escuché que zsh tiene una funcionalidad de autocompletar bastante bien programable, pero mi shell-fu es bastante débil.

¿Alguien sabe cómo configurar esto?

Respuesta1

Para completar rutas parciales, basta con iniciar el sistema de finalización (al menos en mi sistema, usando zsh v4.3.17):

autoload -U compinit && compinit
zmodload zsh/complist

Si desea ser un poco más sofisticado, puede hacer que la coincidencia no distinga entre mayúsculas y minúsculas:

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'

Actualización 1:

No sé si puedes hacer el autocompletado al estilo Comando-T... pero como zsh tiene que conseguirtodocoincide antes de que muestre algo, hacer esto sobre la marcha, especialmente en algún lugar que tenga muchos subdirectorios/archivos, podría no ser factible.

Sin embargo, podrías utilizar:

**/*thing <Tab>

Coincide **con todos los archivos y subdirectorios del directorio actual.

Idea: Si no tiene que ser una lista actualizada de archivos, podría escribir una función de finalización que utilice la salida de locate(es decir, una lista de archivos precalculada)

Actualización 2: https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh

Respuesta2

Otra alternativa interesante es usar algo comofad.

información relacionada