ホーム > ブログ > Bear's Droppings > Cygwin の git で自動補完(git-completion)を使う方法(+ おまけ) このエントリーを含む はてなブックマーク 0 users

Cygwin の git で自動補完(git-completion)を使う方法(+ おまけ)

Posted by bear.mini at 2009/11/27 21:36:57
タグ: Computer

最近、「git-completion.bash を使うと幸せになれるよ~!」という記事をいくつか見たので早速使ってみようと思ったのですが、それらの記事で説明されている方法は、パッケージシステムでインストールした git じゃなくてソースコードの tarball から git をインストールしたツワモノにしか通用しない方法だったりして、僕のようなパッケージシステムに頼りきっている軟弱者には使うことができませんでした。

 

試行錯誤の末、パッケージシステムを使って git をインストールした場合でも自動補完を使えるようになる方法がわかったので書き残しておきます。簡単ですよ!

 

なお、この手順は Cygwin で動作確認しましたが、ほかの環境でも同様の手順で可能だと思います。

 

ステップ 1. Cygwin の git-completion パッケージをインストール

  1. Cygwin 向けのパッケージでは、必要なファイルが git-completion パッケージに含まれていますのでこれをインストールします。
    もちろんすでに導入済みであればこのステップを実行する必要はありません。
    インストールするには、cyg-apt を使うか、Cygwin の setup.exe を実行します。
    ちなみにこの記事を書いた時点で私の環境には、以下のようなバージョンの git-completion がインストールされていました。 
    $ cyg-apt version git-completion
    1.6.1.2-1

 

ステップ 2. .bashrc を書き換えて、git  の自動補完を有効にする

このステップには、実は 2 つの選択肢があります。

  • A) git だけの自動補完を有効にする方法
  • B) git だけでなく、インストールされているすべての自動補完を有効にしてしまう方法

どちらか好きなほうを選択して実行してください。

よくわからない場合は A) が無難なような気もしますが、B) のほうが作業がより簡単ですしほかのコマンドの補完も有効になるので便利といえば便利です。B) を選ぶことによる弊害はあまりないと思いますので B) でいいのではないでしょうか。

 

 

A) git の自動補完だけを有効にする

  1. /etc/bash_completion.d/git を適当な場所にコピーします。
    例)
    $ cp /etc/bash_completion.d/git ~/.git-completion.bash
  2. コピーしたスクリプトを取り込むための行を .bashrc に追加します。
    例)
    ~/.bashrc
    if [ -e "${HOME}/.git-completion.bash" ] ; then 
      source "${HOME}"/.git-completion.bash 
    fi 

わざわざコピーしなくてもいいのでは・・・と思いますが、/etc/bash_completion.d/git の中を読むと、上記の方法が書かれています。

 

 

B) git だけでなく、すべての自動補完を有効にする

~/.bashrc を開くと、以下のような行がどこかにあるはずですので、コメントを解除して有効にします。

# case $- in
#  *i*) [[ -f /etc/bash_completion ]] && . /etc/bash_completion ;;
# esac
case $- in
  *i*) [[ -f /etc/bash_completion ]] && . /etc/bash_completion ;;
esac

見つからない場合は、 同じような内容の行を自分で書き込みましょう。

 

これで自動補完が有効になるコマンドの一覧は、

$ ls /etc/bash_completion.d/
をすればわかると思います。

 

 

A), B), いずれの変更を行った場合も、最後に source ~/.bashrc を実行して、3. の変更の効果を取り込みます。

$ source ~/.bashrc

 

これで、プロンプトから git と入力したあとに TAB キーを 2 回押すと、サブコマンドが補完されるようになります。

$ git [TAB][TAB]
add                 clone               init                reset 
am                  commit              instaweb            revert 
annotate            config              log                 rm 
apply               describe            merge               send-email 
archive             diff                mergetool           shortlog 
bisect              fetch               mv                  show 
blame               filter-branch       name-rev            show-branch 
branch              format-patch        pull                stage 
bundle              fsck                push                stash 
checkout            gc                  rebase              status 
cherry              get-tar-commit-id   relink              submodule 
cherry-pick         grep                remote              svn 
citool              help                repack              tag 
clean               imap-send           request-pull        whatchanged 
$ git 

 

上に示したようなサブコマンドだけでなく、サブコマンドに指定するブランチ名やタグ名、長いオプション名(-- で始まるやつですね)などなど、いろんなものを補完してくれるようになるようです。

 

ちなみに、Ubuntu 9.10 では、git をパッケージでインストールしたあと特に何か設定を変えたりしたつもりはないのですが最初から自動補完が有効になってました。

git-core パッケージと一緒に /etc/bash_completion.d/git がインストールされており、さらにデフォルトの .bashrc で /etc/bash_completion を実行するようになっているようなので、最初から有効になっているのですね。(多分)

 

 

おまけ - プロンプトに git のブランチ名を表示させる方法

 

/etc/bash_completion.d/git の中では、__git_ps1 という関数が定義されていて、それを呼び出すと現在のブランチ名を含む文字列を取得することができます。

 

これを使って \$(__git_ps1) という文字列を環境変数 PS1 に組み込むと、めでたくプロンプトにブランチ名が表示されるようになります。

 

git のワークツリーの外にいるときは、__git_ps1 の結果は空文字列となりますので、プロンプトに表示するのに好都合です。(それで名前に ps1 と入っているのだと思います)

 

自動補完とはちょっと異なりますが、なんかおまけをもらったような得した気分になりますね。

このページに寄せられたコメント

このページにはまだコメントが投稿されていません。

コメントしてください:
お名前: (半角/全角問わず 16 文字まで)
コメント:
(no HTML)
確認:
このテキストボックスに "確認" の 2 文字を書くと投稿できるようになります。
投稿ボタンが自動的に有効にならない場合は、ここをクリックしてください
これは、自動的にスパムコメントを書き込もうとする悪意をもったプログラムと、 そうでないあなたを識別するためのものです。お手数をおかけしますがよろしくお願いします。 また、ブラウザによっては対応していない場合があるかも知れません。IE 7 と Firefox で動作確認を行いました。

このページに寄せられたトラックバック

このページはまだトラックバックを受信していません。

このページへのトラックバック Ping URL:
http://bearmini.net/trackback.aspx?~/blog/view.aspx?bid=1&aid=172

このサイトの上位人気記事