En zsh
, el cd
comando tiene una forma de dos argumentos: cd OLD NEW
cambios 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 OLD
se 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/foo
y también hay directorios /also/to/foo
y /path/to/foo/prime
, entonces cd p
Tabcompleta p
a prime
. Si tengo la intención de ejecutar cd path also
, me gustaría que zsh también se ofrezca path
como 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
, esperoalso
que se complete, nop
.cd t<tab>
debería ofrecerth/to/foo/prime
yto/foo/prime
? ¿O debería limitarse a los límites del directorio?Respuestas:
Supongo que podría agregar los componentes de
$PWD
a lacd
lista de finalización, aunque esto parece requerir jugar con_cd
; es decir, una versión personalizada de_cd
debe aparecer primero en$fpath
.Luego arriba en la parte superior de
~/zcomp/_cd
agregar una funcióny justo antes de la
_alternative
línea agregue lo que eso devuelve a la lista de alternativasaunque esto siempre agregará los
pwd
componentes a lascd
terminaciones:con lógica adicional, solo puede agregar los
$PWD
componentes cuando ya hay un segundo argumento presente en lugar de siempre.¡Sin embargo! Esto siempre arruina la
cd
finalización y requiere que apliquemos parches a la_cd
finalizació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 soloPWD
para que aparezca la finalización de los componentes. Agregue esto a~/.zshrc
Y luego una
_cd
terminación_cdsub
destripada para ser colocado en algún lugar de$fpath
:fuente