Tengo un directorio donde pongo todos mis proyectos, digamos que es ~/projects
a modo de ejemplo. Creé un comando llamado s
que toma un argumento y me lleva a ese directorio. Ej: s foo
me mueve a ~/projects/foo
.
Lo que me gustaría es tener algún tipo de comando de finalización, que actuaría como cd
si pudiera seguir presionando tabpara avanzar en los ~/projects/...
directorios.
Básicamente, cd
con 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.zshrc
que 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/project
secció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 ~s
en 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 ~s
para referirse a su directorio y puede usar la función Tab-Completion en un cd
comando: cd ~s/Tab
Si tiene autocd
configurada 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)