web-dev-qa-db-ja.com

bash完了規則が保持されるように、「git」を「g」にエイリアスするにはどうすればよいですか?

これを行う場合:

alias g='git'

すべての完了規則を緩めます(つまり、入力後にTabキーを押すと、ブランチとリモートは自動的に完了しなくなります(例:g Push o)。

25

/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
21
enzotib

最新のbash-completionアップストリームが移動し、少し名前を変更しました。雪が降る:

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

Ubuntuの最近のバージョン(たとえば、14.04、Fedora 22以降)でこれを使用する場合:

completion: function `_git' not found

完了中。

18
lzap

~/.bashrc ::

alias g='git'
source /usr/share/bash-completion/completions/git
complete -o default -o nospace -F _git g

経由 http://29a.ch/2013/8/9/fixing-bash-autocomplete-on-ubuntu-13-04

7
hnasarat

最初に、元の完了コマンドを検索します。例:

$ 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を初めて押した後にのみ、完了関数が動的にロードされます。したがって、元のコマンドを使用せずにエイリアス+ TABを試すと、「bash:completion:function not found」のようなエラーが表示される場合があります。

2
wisbucky

これを行うための更新された方法 (私にとっては完全ではありません):

  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で変更をソースします
1
Elijah Lynn

完全を期すために、~/.bash-completionファイルを使用して回答を追加します。このファイルは、bash完了スクリプトの最後にあります。

_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にはエイリアスだけがあります。私がしようとしていた:

  • ~/.bashrcをbash-completionスタッフ(それが属する場所に保管する)で汚染することを避ける✓
  • git-completion全体をシェルに入力しないでください☹

残念ながら、_xfuncはgit-completionをソースしています。適切に行う方法がわかったら、この回答を更新します(また、ランチパッド here で質問しました)。

0
kub1x