Quiero finalización difusa entre mayúsculas y minúsculas para archivos y directorios en zsh. Después de leer el manual durante unas horas, esto es lo que se me ocurrió:
zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
Además, quiero presionar TABuna vez para mostrar las posibles finalizaciones, solo modificando lo que he escrito si hay exactamente una finalización. Luego, presionar TABuna segunda vez debería ponerme en el modo "finalización del menú". Basado en los manuales, se me ocurrió esto:
zstyle ':completion:*' menu select
Ahora todo funciona como debería, excepto en una circunstancia. Tengo dos carpetas Desktopy .rstudio-desktopen mi directorio personal. Como tengo setopt globdots, espero escribir lo siguiente:
$ cd ~/dktop<TAB>
dejar mi comando como se ingresó, y mostrar como candidatos de finalización Desktopy .rstudio-desktop. En cambio, se elimina dktop , dejándome con lo siguiente:
$ cd ~/
He examinado todos los manuales, guías, preguntas de Stack Exchange relevantes y varias otras fuentes relevantes. Pero haga lo que haga, no puedo hacer que esto funcione.
Curiosamente, sin embargo, si estoy en el directorio de inicio y escribo lo siguiente, entonces todo funciona como se esperaba:
$ cd dktop<TAB>
Es decir, solo es un problema con segmentos de rutas no líderes (y puede ver C-x hque esto corresponde a la directoriesetiqueta en lugar de a la local-directoriesetiqueta que se está utilizando).
Para una fácil reproducibilidad, aquí hay una ~/.zshrcque reproducirá la situación y el comportamiento descritos anteriormente (probado en una nueva máquina virtual El Capitan con zshHomebrew).
fuente

zsh 5.3.1enArch Linux.cd ~/dktop<tab>rendimientoscd ~/Desktop.zsh 5.3.1en OS X el problema se reproduce. Es interesante que haya una diferencia entre los sistemas operativos.Respuestas:
Una posible solución es hacer:
Esto hará que la pestaña se expanda
~/a la ruta absoluta.fuente
cd /Users/raxod502/dktop, y la finalización se desactivará.~/a su camino absoluto, la finalización difusa comenzaría a funcionar. Parecía uno de esos casos donde el problema es que lo evalúa una vez, pero en realidad lo necesitas para evaluar dos veces para que funcione, por lo que tener la ruta absoluta en lugar de eso~/significaría que volvería a necesitar solo una evaluación. Pero mierda, lo siento, olvidé que Bindkey reemplaza los enlaces antiguos, y no puedo encontrar nada que diga si es posible vincular dos funciones a una tecla. Sin mi bindkey, ¿su finalización funciona según lo previsto cuando se le dan rutas absolutas?~/dktopo/Users/raxod502/dktop; el resultado es el mismo, es decir, quedktopse elimina cuando presiono TAB.