bash 완료 규칙이 유지되도록 'git'을 'g'로 별칭 지정하는 방법은 무엇입니까?


25

내가 이렇게하면 :

alias g='git'

모든 완료 규칙을 풉니 다 (예 : 입력 한 후 Tab 키를 누르면 분기 및 리모컨이 더 이상 자동으로 완료되지 않습니다 g push o).


나는 당신에게 대답이 없지만 잠시 시간을내어 다른 두 글자를 입력하지 않으면 실제로 많은 이점을 얻을 수 있을지 궁금합니다.
Marco Ceppi

4
물론 이죠! 아마도 하루에 100 번 이상 'g'를 입력하고 있습니다.
Paweł Gościcki

3
자주 사용하는 짧은 명령을 더 짧은 별칭으로 별칭을 지정하면 하루에 수백 번의 키 누르기를 줄일 수 있습니다. 내 셸 기록에 따르면 g=git지난 달에 별칭을 756 번 사용했는데, 이는 'g'와 'i'키를 총 1512 번 누르는 것을 저장했음을 의미합니다. 그것은 내 자식 별칭과 결합하여 한 달에 수만 건의 키 누르기를 절약 할 수 있습니다.

키 입력 단축의 주요 요점은 손이 뇌를 따라 잡을 수 있도록 돕는 것입니다.
Tyler Collier

superuser.com/questions/436314/ 의 스크립트는 잘 작동했습니다. 언급 할 가치가 있다고 생각합니다.
brandizzi

답변:


21

에서 다음을 적절히 복사 및 수정 /etc/bash_completion.d/git하려면 다음 행을 추가하십시오 ~/.bashrc.

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g

하아! Wunderbar! 그 것처럼 작동 :)
Paweł Gościcki

1
나는 또한 source /usr/share/bash-completion/completions/git내 .bashrc 에 추가 했다
pcx

.bashrc여기서 코드가 작동 하는지 확실하지 않지만이 답변은 확실히 구식입니다. /etc/bash_completion.d/git14.04에 존재하지 않는 것 같습니다. 아래의 lzap의 답변을 참조하십시오 .
Max Wallace

18

최신 bash-completion upstream은 약간 바뀌었고 이름이 바뀌 었습니다. 지금은 :

source /usr/share/bash-completion/completions/git
__git_complete g __git_main

다음과 같은 상황이 발생하면 최신 버전의 Ubuntu (예 : 14.04, Fedora 22+)에서이를 사용하십시오.

completion: function `_git' not found

완료하는 동안.


2
이것이 유일한 정답 인 것 같습니다.
pjvandehaar

__git_complete gc _git_checkout보다 구체적인 별명에 대한 완료를 설정 하려면 (또는 유사한)를 사용하십시오 . /usr/.../git위와 같이 검색 하여 올바른 이름을 찾으십시오.
Max Wallace

1
@MaxWallace-.gitconfig에서 특정 git 메소드의 별명을 설정하면 (예 : gc = checkout), 완료를 명시 적으로 구성 할 필요가 없습니다.
Piotr Aleksander Chmielowski

1
트윗 담아 가기 하지만 최상위 bash는 별칭이 작업 (예를 들어 생각하지 않는다 gc=> git checkout앨리어싱 반대) ccheckoutgit, 그리고 말을 git c. 틀 렸으면 말해줘.
Max Wallace

@MaxWallace 네, 그렇습니다, 제 실수입니다.)
Piotr Aleksander Chmielowski


2

먼저 원래 완료 명령을 찾으십시오. 예:

$ complete | grep git

complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git

이제 이들을 시작 스크립트에 추가하십시오 (예 : ~ / .bashrc) :

# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g

# load dynamically loaded completion functions (may not be required)
_completion_loader git

_completion_loader라인은 필요하지 않을 수 있습니다. 그러나 경우에 따라 완료 기능은 명령을 입력 TAB하고 처음으로 누른 후에 만 ​​동적으로로드 됩니다. 따라서 원래 명령을 사용하지 않고 alias +를 시도하면 TAB"bash : completion : function not found"와 같은 오류가 발생할 수 있습니다.


잘 작동합니다. 나에게 이것은 정답이며, grep 명령이 완료되면 편리합니다. 완성 로더가 필요하지 않았습니다.
Paul Carlton

1

업데이트 방법은이 작업을 수행하는 (완전 나를 위해 작동하지 않을 것이다) :

  1. cd -홈 디렉토리로 전환
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. source ~/git-completion.bash.bashrc 파일에 추가 하십시오 (이 파일이 홈 폴더에 없으면 bash가 자동으로 찾습니다)
  4. alias g='git'.bashrc 파일에 추가 하십시오.
  5. 새로운 세션을 시작하거나 source ~/.bashrc

2
: 당신은 실제로 당신이에 연결 주석에 완료를 추가 한 부분 생략__git_complete g _git
pjvandehaar

0

완성을 위해 ~/.bash-completion파일을 사용하여 답변을 추가하고 싶습니다.이 파일은 bash-completion 스크립트의 끝에서 제공됩니다.

_xfunc git __git_complete g __git_main
_xfunc git __git_complete gl _git_log
_xfunc git __git_complete gd _git_diff
_xfunc git __git_complete gb _git_branch

그런 다음 ~/.bashrc별칭이 있습니다. 나는 노력하고 있었다 :

  • ~/.bashrcbash-completion 물건으로 오염시키지 마십시오 (소유물을 보관하십시오) ✓
  • 전체 git-completion을 내 쉘에 소싱하지 마십시오 ☹

불행히도 _xfunc소스 완성 git-completion 어쨌든. 내가 제대로 (나는 또한 lunchpad에 요청하는 방법을 알아낼 일단 나는이 대답을 업데이 트됩니다 여기 ).


-1

여기를보십시오 : https://gist.github.com/scue/576310b7c6b7714aad05

wget https://gist.github.com/scue/576310b7c6b7714aad05/raw/459d46761c231f5c373c1cf496920b01bb6669d2/.bash_aliases.git -O ~/.bash_aliases.git
echo "test -e ~/.bash_aliases.git && source ~/.bash_aliases.git" >> ~/.bashrc

즐기세요! (^ o ^) /


1
미안하지만 그것은 완전히 다른 것입니다. 전체 명령에 대해 이러한 간단한 별칭을 만드는 것은 쉽지 않습니다.
Paweł Gościcki

Oh-My-Zsh의 git 플러그인처럼 작동하게 만듭니다 : github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/…
scue

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.