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 TAB
una vez para mostrar las posibles finalizaciones, solo modificando lo que he escrito si hay exactamente una finalización. Luego, presionar TAB
una 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 Desktop
y .rstudio-desktop
en 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 Desktop
y .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 h
que esto corresponde a la directories
etiqueta en lugar de a la local-directories
etiqueta que se está utilizando).
Para una fácil reproducibilidad, aquí hay una ~/.zshrc
que reproducirá la situación y el comportamiento descritos anteriormente (probado en una nueva máquina virtual El Capitan con zsh
Homebrew).
fuente
zsh 5.3.1
enArch Linux
.cd ~/dktop<tab>
rendimientoscd ~/Desktop
.zsh 5.3.1
en 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?~/dktop
o/Users/raxod502/dktop
; el resultado es el mismo, es decir, quedktop
se elimina cuando presiono TAB.