Tenho um diretório onde coloco todos os meus projetos, digamos que é ~/projects
como exemplo. Eu criei um comando chamado s
que recebe um argumento e me move para esse diretório. Ex.: s foo
me move para ~/projects/foo
.
O que eu gostaria é de ter algum tipo de comando de conclusão, que funcionaria como cd
se eu pudesse continuar pressionando tabpara ir mais longe nos ~/projects/...
diretórios.
Basicamente, cd
com um prefixo que está sempre presente.
Examinei a conclusão do zstyle em man zshcompsys
, mas percebi que não sei o suficiente sobre isso para entendê-lo corretamente.
Responder1
Aqui está um exemplo demeu próprio.zshrc
que mantenho como um trecho de copiar/colar:
# 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
Basta editar a /path/to/project
seção em ambas as linhas acima e pronto.
Responder2
Uma maneira diferente de obter um efeito semelhante é definir aliases para diretórios:
setopt auto_cd
alias -d s=~/projects
Digite ~s/
Tabpara mudar para um subdiretório de ~/projects
; você ~s
também pode usar em um argumento de comando.
Responder3
Você pode adicionar uma entrada diretamente à tabela hash do diretório nomeado:
hash -d s="${HOME}/projects"
Agora você pode simplesmente usar ~s
para se referir ao seu diretório e usar o preenchimento de tabulação em um cd
comando: cd ~s/Tab
Se você tiver a opção do zsh autocd
definida, poderá omitir o cd
.
Responder4
Você pode modificar CDPATH
:
export CDPATH="$CDPATH:$HOME/Repositories:$HOME/Repositories/jc/Projects"
Agora você pode acessar todos os subdiretórios dentro dos diretórios especificados de todos os outros diretórios, como se fossem os subdiretórios do diretório atual:
➜ ~ /tmp
➜ /tmp pwd
/tmp
➜ /tmp MyAwesomeProject
~/Repositories/jc/Projects/MyAwesomeProject
➜ MyAwesomeProject git:(master) pwd
/Users/rafael/Repositories/jc/Projects/MyAwesomeProject
➜ MyAwesomeProject git:(master)