このエントリーは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の設定もこれだけ。意識が低すぎます。
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を有効にしておくと、補完候補も一覧で見れたりしてもっと便利!!
"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〜3まで見れば十分かと。
明日は ppworks さんです。