Zsh, preenchimento de guia de diretório com prefixo

Zsh, preenchimento de guia de diretório com prefixo

Tenho um diretório onde coloco todos os meus projetos, digamos que é ~/projectscomo exemplo. Eu criei um comando chamado sque recebe um argumento e me move para esse diretório. Ex.: s foome move para ~/projects/foo.

O que eu gostaria é de ter algum tipo de comando de conclusão, que funcionaria como cdse eu pudesse continuar pressionando tabpara ir mais longe nos ~/projects/...diretórios.

Basicamente, cdcom 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.zshrcque 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/projectseçã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ê ~stambé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 ~spara se referir ao seu diretório e usar o preenchimento de tabulação em um cdcomando: cd ~s/Tab

Se você tiver a opção do zsh autocddefinida, 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)

informação relacionada