현재 별칭 집합을 기반으로 새 별칭 집합을 만드시겠습니까(예: gst -> dst)?

현재 별칭 집합을 기반으로 새 별칭 집합을 만드시겠습니까(예: gst -> dst)?

zsh 플러그인의 git 별칭을 사용하고 있습니다.https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git

따라서 다음과 같은 git 별칭이 있습니다.

gst # git status
ga # git add
gc "commit" # git commit -v "commit"
...

...또한 git bare repo를 사용하여 모든 도트 파일을 백업합니다.https://github.com/Anthonyive/dotfiles/blob/0706bc81daa3aeb7899b506cd89d4ab78fc7b176/USAGE.md

특히 git bare repo 기술은 git 명령의 별칭을 다음과 같이 지정합니다 dotfiles.

alias dotfiles='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
alias d='dotfiles'

그렇다면 모든 git alias 명령을 어떻게 매핑합니까 d? 좋다:

dst # similar to gst, but uses the dotfiles alias
da # similar to ga
dc "commit" # similar to gc "commit"
...

하나씩 매핑하는 것은 지루한 것 같습니다 ...

답변1

연관 배열aliases모든 별칭 정의를 포함합니다.

for name in "${(@k)aliases}"; do
  if [[ $name == g* && $aliases[$name] == 'git '* ]]; then
    alias d${name#g}="dotfiles ${aliases[$name]#git }"
  fi
done

또는 d별칭을 다음 git 명령이 필요한 함수로 변경할 수 있지만 먼저 셸 별칭을 확장하고 선행 git.

alias d='d ' # expand aliases after d
function d {
  if [[ $1 == "git" ]]; then shift; fi
  dotfiles "$@"
}

그런 다음 d gst실행됩니다 dotfiles status. d gc myfile실행됩니다 dotfiles commit myfile. d ls-tree실행됩니다 dotfiles ls-tree. 완료는 가능하지만 쉽지는 않습니다.

답변2

git모든 호출을 로 바꾸려면 git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME다음 함수를 사용할 수 있습니다.

git() {
  command git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME "$@"
}

하지만,이 경우에는 실제로 그렇게 할 필요가 없습니다. git이러한 옵션 플래그를 다음으로 전달하는 대신:

export GIT_DIR=$HOME/.dotfiles/
export GIT_WORK_TREE=$HOME

바라보다https://www.git-scm.com/docs/git#Documentation/git.txt---git-dirltpathgt


그런데, 많은 별칭을 유지하고 기억하려고 하는 대신, 다음을 사용할 수 있습니다.zsh-autocomplete기록 완료 모드. (면책조항: 저는 이 플러그인의 관리자입니다.)

여기에 이미지 설명을 입력하세요.

관련 정보