Zsh, 접두사가 있는 디렉터리 탭 완성

Zsh, 접두사가 있는 디렉터리 탭 완성

~/projects내 모든 프로젝트를 저장하는 디렉토리가 있습니다. 예를 들어 보겠습니다 . 나는 s하나의 인수를 취하고 나를 해당 디렉토리로 이동시키는 명령을 만들었습니다 . 예: s foo나를 로 이동시킵니다 ~/projects/foo.

내가 원하는 것은 일종의 완성 명령을 갖는 것입니다. 이 명령은 계속해서 디렉토리 로 이동하기 위해 cd누를 수 있도록 하는 것입니다 .tab~/projects/...

기본적으로 cd항상 존재하는 접두사가 있습니다.

에서 zstyle 완성을 살펴봤지만 man zshcompsys제대로 이해할 만큼 지식이 부족하다는 것을 깨달았습니다.

답변1

다음은내 자신의.zshrc복사/붙여넣기 스니펫으로 보관합니다.

# 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

위 두 줄의 섹션을 편집하면 /path/to/project됩니다.

답변2

유사한 효과를 얻는 다른 방법은 디렉터리에 대한 별칭을 정의하는 것입니다.

setopt auto_cd
alias -d s=~/projects

~s/ Tab의 하위 디렉토리로 변경하려면 입력하세요 ~/projects. ~s명령 인수에도 사용할 수 있습니다 .

답변3

명명된 디렉터리 해시 테이블에 항목을 직접 추가할 수 있습니다.

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

이제 간단히 를 사용하여 ~s디렉토리를 참조할 수 있으며 다음 cd명령에서 탭 완성 기능을 사용할 수 있습니다. cd ~s/Tab

autocdzsh 옵션이 설정 되어 있으면 cd.

답변4

다음을 수정할 수 있습니다 CDPATH.

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

이제 마치 현재 디렉터리의 하위 디렉터리인 것처럼 다른 모든 디렉터리에서 지정된 디렉터리 내의 모든 하위 디렉터리에 액세스할 수 있습니다.

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

관련 정보