vimの便利なPlugin(その19)fugitive.vim ~ vimからGitを簡単操作

 

バージョン管理は、ソフトウェア開発で必須となります。 有名で良く使われているのは、SubversionやGitあたりでしょうか? 2010年頃からGitのシェアは、Subversionを超え始めました。 私の職場では、Subversionが使われておりますが、プライベートではGitを使うことが多いです。 どちらが優れているかは、それぞれ使う目的や環境にもよりますので一概には言えないですが、個人的には複数拠点に開発者が点在しているような環境で無ければSubversionで良いような気がしています。 ただ、世の中Gitのシェアが増えており、Gitを知らないと仕事にならないこともあるかと思います。 Git信者には少しネガティブな意見かもしれませんが、「Git didn’t beat SVN, GitHub did.」このブログがGitがシェアを取った理由が分かる記事で参考になりました。 前置きが長くなりましたが、今回はGitをvimから便利に使うことができるように開発されたfugitiveというPluginを紹介します。 正直私もまだ使い慣れてないところもありますが、基本的な使い方を紹介していきます。 ここでは、以下の環境を前提にします。 また、Gitの環境設定をされたことが無い方はこちらを先に。

  • CentOS6.8 x86_64
  • vim-7.4

Install

今回もdein.vimを前提とさせていただきます。 まだ、dein.vimを使っていない方は(その5)から。

call dein#add(‘tpope/vim-fugitive’)

これで「:call dein#install()」をコマンドラインモードで実行すれば、インストールは終了。

使い方

Gstatus

Gitの作業ディレクトリへ行き、vimで何かファイルを開いてみます。 コマンドラインモードで「: Gstatus」を実行すると次の様に別ウィンドウが開き git status とターミナルでタイプしたときの表示が現れます。

現れたウィンドウの下部に .client.c.swp という管理されていないファイルが存在するというメッセージが表示されているのが分かります。 vimがファイルを開いたときに自動で作成してしまうスワップファイルです。 毎回このスワップファイルが表示されてしまうのも鬱陶しいので、vimの設定でスワップファイルの吐き出しディレクトリを変えてしまうか、Gitの設定で .swp という拡張子を持ったファイルを無視するよう設定するかしてみましょう。 今回は後者で。 Gitの作業ディレクトリに .gitignore という名前のファイルを作成し、次の行を記述します。

.gitignore
*.swp

そして作業ディレクトリ内のファイルを開き直すと、今度はvimのスワップファイルは表示されないはずです。 このように無視したいファイルがあれば、この .gitignore ファイルに記述します。

以下にいくつかGstatusウィンドウを表示してからの操作方法を紹介します。

  1. Gstatusウィンドウを閉じる。
    Gstatusウィンドウ上で q
  2. Gstatusウィンドウの再描画。
    Gstatusウィンドウ上で r
  3. Gstatusのヘルプを見る。
    Gstatusウィンドウ上で g? または、:help Gstatus
  4. Gstatusウィンドウ内にリストされているファイルを編集または確認する。
    ファイル名のある行の上にカーソルを持っていきエンター
  5. GstatusウィンドウでリストされているファイルのStaging状態を変更。
    ファイル名のある行の上にカーソルを持っていき (ハイフン) でStaging状態のON/OFFが変わります。 (git add/git reset)
  6. Gstatusウィンドウでリストされているファイルと最新コミットとの差を確認。
    ファイル名のある行の上にカーソルを持っていき D (大文字)を入力。 または、dv (:Gvdiff と同じ)、ds(:Gsdiff と同じ)。
  7. Gstatusウィンドウでリストされているファイルを下部ウィンドウにスプリットして表示する。
    水平分割:ファイル名のある行の上にカーソルを持っていき o (小文字)(:Gsplit と同じ)を入力。
    縦分割:ファイル名のある行の上にカーソルを持っていき S (大文字)(:Gvsplitと同じ)を入力。
  8. 変更されているファイルを最新コミットに戻す。
    ファイル名のある行の上にカーソルを持っていき U(大文字)を入力。
  9. Staging状態にあるファイルをコミットする。
    ファイル名のある行の上にカーソルを持っていき cc (小文字)を入力。

Gread [fugitive-revision]

現在開いているファイル名でバッファを空にして、[fugitive-revision]のファイルを読み込みます。 fugitive-revisionを指定しないで、:Gread とすると最新コミットのファイル情報を読み込みます。 そういった意味で、git checkout に似ていますがバッファ上に読み込むだけでディスクに書き込むようなことはしません。 ちなみに fugitive-revisionは、gitのrevisionとにています。使いそうなものを載せておきますが、詳細はhelpメニューを参照下さい。

  1. (ハイフン)現在開いているファイルの最新のコミット
  2. ^  現在開いているファイルの一つ前のコミット
  3. ~3 現在開いているファイルの3つ前のコミット

例):Gread ~3 とすると3つ前のコミットファイルがバッファに読み込まれます。

Gwrite [path]

[path]を指定しないと、現ファイルのファイルパスへ書き込みを行い、stagingも行います。 つまりgit addをします。 また、:Gwrite [path] のようにして書き込みを行う作業パスを明示的に指定できます。

Gcommit

現ファイルをコミットします。別ウィンドウが開きコミットメッセージを入力できる状態になります。 既にコミットされており、変更の必要が無い場合は、:Gstatus が代わりに実行されます。

Gdiff [fugitive-revision]

現在開いているファイルに対してvimdiffを適用します。 引数を指定しないと index内のバージョンが使われます。 diffoptの設定により、新しい方のファイルが右(左)または下部(上部)になります。 fugitive-revisionは、Greadまたはhelpを参照下さい。

Gedit [fugitive-revision]

fugitive-revisionでしていしたバージョンのファイルを編集します。 fugitive-revisionは、Greadまたはhelpを算用下さい。

Gmove [destination]

git mv 機能をfugitiveで実装したものです。 destinationは、現ディレクトリからの相対パスになります。 -f オプション(–force)を使いたい場合は、! を付けて実行する。

Gremove

git rm 機能をfugitiveで実装したものです。 実行後、開いているファイルバッファーが消されます。 -f オプション(–force)を使いたい場合は、! を付けて実行する。

Glog [args]

開いているファイルの全てのリビジョンをquickfixリストに開きます。 Glogを実行すると、全リビジョンのリストが表示されます。 そしてエンターを押すとリストにある一番初めのファイルが開きます。 そこで :copen とするとquickfixリストが別ウィンドウに開きます。 argsは、git log に与えるオプションと同じものを指定できるようです。 例えば --reverseとか。

Gpush [args]

git push をfugitiveから呼び出します。 エラーがあるとquickfixリストに展開します。 エラーは、:cwindow を呼び出して確認できます。

Gfetch [args]

Gpushと同様の使い方で、git fetchを呼び出します。

Gmerge [args]

git merge をfugitiveから呼び出します。 エラーやファイルのコンフリクトをquickfixリストに展開します。 マージが成功すると :Gcommit が呼び出され別ウィンドウでコミットメッセージを入力できる状態になります。

Gpull [args]

Gmergeと同様な動作ですが、git pull が呼び出されます。

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら