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.