En zsh, el cdcomando tiene una forma de dos argumentos: cd OLD NEWcambios a ${PWD/OLD/NEW}. Con el sistema de finalización de nuevo estilo, zsh es capaz de completar NEW: el segundo argumento se completa en función de lo que OLDse puede sustituir para obtener un directorio existente. Pero el primer argumento solo se completa en los directorios existentes.
¿Cómo puedo hacer que zsh ofrezca terminaciones que son valores posibles para OLD, además de completar directorios existentes?
Por ejemplo, si el directorio actual es /path/to/fooy también hay directorios /also/to/fooy /path/to/foo/prime, entonces cd pTabcompleta pa prime. Si tengo la intención de ejecutar cd path also, me gustaría que zsh también se ofrezca pathcomo una finalización. ¿Cómo?
Usar valores ya escritos del segundo argumento para limitar las posibilidades del primer argumento sería una ventaja, pero completar el primer argumento de forma independiente también estaría bien.
fuente

cd p also <Tab>ocd p also <left arrow x 5> <Tab>?cd p also<Left*5><Tab>: si presiono<Tab>mientras el cursor está presionadoalso, esperoalsoque se complete, nop.cd t<tab>debería ofrecerth/to/foo/primeyto/foo/prime? ¿O debería limitarse a los límites del directorio?Respuestas:
Supongo que podría agregar los componentes de
$PWDa lacdlista de finalización, aunque esto parece requerir jugar con_cd; es decir, una versión personalizada de_cddebe aparecer primero en$fpath.Luego arriba en la parte superior de
~/zcomp/_cdagregar una funcióny justo antes de la
_alternativelínea agregue lo que eso devuelve a la lista de alternativasaunque esto siempre agregará los
pwdcomponentes a lascdterminaciones:con lógica adicional, solo puede agregar los
$PWDcomponentes cuando ya hay un segundo argumento presente en lugar de siempre.¡Sin embargo! Esto siempre arruina la
cdfinalización y requiere que apliquemos parches a la_cdfinalización aguas arriba . Otra opción sería crear un nuevo nombre para la función proporcionada por los dos argumentoscd, quizás llamadocdsub, y soloPWDpara que aparezca la finalización de los componentes. Agregue esto a~/.zshrcY luego una
_cdterminación_cdsubdestripada para ser colocado en algún lugar de$fpath:fuente