Zsh, finalización de tabulación de directorio con prefijo

Zsh, finalización de tabulación de directorio con prefijo

Tengo un directorio donde pongo todos mis proyectos, digamos que es ~/projectsa modo de ejemplo. Creé un comando llamado sque toma un argumento y me lleva a ese directorio. Ej: s foome mueve a ~/projects/foo.

Lo que me gustaría es tener algún tipo de comando de finalización, que actuaría como cdsi pudiera seguir presionando tabpara avanzar en los ~/projects/...directorios.

Básicamente, cdcon un prefijo que siempre está presente.

Investigué la finalización de zstyle en man zshcompsys, pero me di cuenta de que no sé lo suficiente para entenderlo correctamente.

Respuesta1

He aquí un ejemplo demío.zshrcque guardo como un fragmento de copiar y pegar:

# Try using the below template to set up zsh functions that act
# as aliases to cd and allow you to get autocomplete nicely.

project() { cd /path/to/project/$1; }
compctl -W /path/to/project/ -/ project

Simplemente edite la /path/to/projectsección en las dos líneas anteriores y estará listo.

Respuesta2

Una forma diferente de lograr un efecto similar es definir alias para directorios:

setopt auto_cd
alias -d s=~/projects

Escriba ~s/ Tabpara cambiar a un subdirectorio de ~/projects; también puedes usarlo ~sen un argumento de comando.

Respuesta3

Puede agregar una entrada directamente a la tabla hash del directorio nombrado:

hash -d s="${HOME}/projects"

Ahora puede simplemente usar ~spara referirse a su directorio y puede usar la función Tab-Completion en un cdcomando: cd ~s/Tab

Si tiene autocdconfigurada la opción de zsh, puede omitir el archivo cd.

Respuesta4

Puedes modificar CDPATH:

export CDPATH="$CDPATH:$HOME/Repositories:$HOME/Repositories/jc/Projects"

Ahora puede acceder a todos los subdirectorios dentro de los directorios especificados desde cualquier otro directorio como si fueran los subdirectorios del directorio actual:

➜  ~ /tmp
➜  /tmp pwd
/tmp
➜  /tmp MyAwesomeProject 
~/Repositories/jc/Projects/MyAwesomeProject
➜  MyAwesomeProject git:(master) pwd
/Users/rafael/Repositories/jc/Projects/MyAwesomeProject
➜  MyAwesomeProject git:(master)

información relacionada