Zsh, conclusão de tabulação de diretório com prefixo

6

Eu tenho um diretório onde coloco todos os meus projetos, digamos que é ~/projects como exemplo. Eu fiz um comando chamado s , que leva um argumento, e me move para esse diretório. Por exemplo: s foo me move para ~/projects/foo .

O que eu gostaria é ter um comando de conclusão de alguns tipos, que funcionaria como cd , então eu poderia continuar pressionando tab para ir mais longe nos diretórios ~/projects/... .

Basicamente, cd com um prefixo que está sempre presente.

Eu olhei para a conclusão do zstyle em man zshcompsys , mas percebi que não sei o suficiente para entender isso corretamente.

    
por nifty 23.01.2012 / 10:20

4 respostas

7

Veja um exemplo de meu próprio .zshrc que guardo como um snippet de cópia / colagem:

# 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 seção /path/to/project nas duas linhas acima e, em seguida, você está pronto.

    
por 23.01.2012 / 10:43
2

Uma maneira diferente de obter um efeito semelhante é definir aliases para diretórios:

setopt auto_cd
alias -d s=~/projects

Digite ~s/ Tab para mudar para um subdiretório de ~/projects ; você pode usar ~s em um argumento de comando também.

    
por 24.01.2012 / 01:30
1

Você pode adicionar uma entrada diretamente à tabela de hash do diretório nomeado:

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

Agora você pode simplesmente usar ~s para se referir ao seu diretório, e você pode usar o preenchimento de tabulação em um comando cd : cd ~ s / Tab

Se você tiver definido a opção autocd do zsh, poderá deixar de fora o cd .

    
por 20.09.2013 / 23:33
0

Você pode modificar CDPATH :

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

Agora, você pode acessar todos os subdiretórios 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)
    
por 19.03.2016 / 12:57