Help us understand the problem. What is going on with this article?

vim-fugitiveがやっぱり便利

More than 5 years have passed since last update.

このエントリーはGit Advent Calendar / Juneの十四日目です。十三日目は Cside_ さんの「ブランチ名 + 作業状態 + stash数 をzshのプロンプトに表示」でした。

vim-fugitive便利ですよね。いい機会だったのでGitのVim-wrapperのひとつvim-fugitiveを復習してみました。

vim-fugitiveの便利なところと言えば、2画面で前後のコードも含めてdiffが見られるところとか、blameが見やすくて楽しいってところだけだと思ってたんですが、調べてみるともっと便利なことがわかりました。

今回は以下について書いてます。

  • :Gread
  • :Gedit
  • :Ggrep
  • 補完
  • 3-way diff

いままで

いままでのボクはと言えば、ただ:GstatusでVimエディタ上にステータス画面を開いて-(add/reset)したり、D(diff)を見たり、C(commit)するだけでした。.vimrcの設定もこれだけ。意識が低すぎます。

~/.vimrc
nnoremap <silent> <Space>gb :Gblame<CR>
nnoremap <silent> <Space>gd :Gdiff<CR>
nnoremap <silent> <Space>gs :Gstatus<CR>

:Greadで変更を取り消す。

現在開いているファイルのコミット前の変更をすべて取り消したい場合は、:Gread を実行するだけです。コマンドラインで、git checkout FILE_NAMEとやるのと同じです。

:Geditで別ブランチのファイルを開く。

:Gedit BRANCH_NAME:% を実行すると、現在のファイルの別ブランチのものを参照することができます。

:GgrepでGitディレクトリ内を検索。

これの便利なところは.gitignoreに記述したファイルを検索の候補から外してくれること。第2引数にはBRANCH_NAME,TAG_NAME,SHAなどを渡せます。

ブランチ名などの補完が効く!

:Git を使えば、コマンドラインでgitコマンドを実行するのと同じことができます。branchやcheckoutとかできます。このとき<Tab>を押すと補完が効くんですね。便利!(補完する前に最初の1文字は自分で入力する必要があるみたいだけど。oを押してから<Tab>を押すとorigin/のブランチリストが出てきました)

おまけですがwildmenuを有効にしておくと、補完候補も一覧で見れたりしてもっと便利!!

~/.vimrc
"command-line completion
set wildmenu
set wildmode=list:longest

補完候補が多いなと感じたら、ブランチをお掃除するタイミングですね。

3-way diffが素晴らしい!

CONFLICTが起きたときって、少なからず精神状態が乱れるし、その状態であの入り乱れたラインの謎を解くのはそう容易くないです。少なくともボクにはハードル高過ぎます。

vim-fugitiveを使えば、左にtarget-branch,中央にworking-copy,右にmerge-branchといった感じで比較しながら作業できるようになります。たぶん使い方の詳細は動画を見た方がわかりやすいので書きません(え?w 動画

ボクが使いそうなコマンドだけまとめておきます。

  • :Gstatus (ステータス画面を開く)
  • D(both modifiedになっているファイルを3-way diff表示)
  • :diffget //2 | diffup(target-branchの変更を取り込んで画面を更新)
  • :diffget //3 | diffup(merge-branchの変更を取り込んで画面を更新)
  • ]c(次のhunkに飛ぶ)
  • [c(前のhunkに飛ぶ)
  • :only(現在のウィンドウだけ残して他を閉じる)

あとがき

quickfix listに表示してもキーを押すとすぐに閉じてしまうので、開きっぱなしにしたり、uniteと連携させたりしたいですね。はやくCONFLICT起きないかなー(こらw

参考:スクリーンキャスト

その1 その2 その3 その4 その5

  • 時間のない人はその1〜3まで見れば十分かと。

明日は ppworks さんです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away